Sort first half in ascending and second half in descending order | Set 2

Given an array of integers, sort the first half of the array in ascending order and the second half in descending order.
Examples:
Input : arr[] = {10, 20, 30, 40}
Output : arr[] = {10, 20, 40, 30}
Input : arr[] = {5, 4, 6, 2, 1, 3, 8, 9, 7 }
Output : arr[] = {2, 4, 5, 6, 9, 8, 7, 3, 1 }
We have discussed a solution that only prints the required order in Sort first half in ascending and second half in descending order | Set 1
Simple Approach: The idea is simple, we sort the first half in increasing order and the second half in decreasing using the library function. Most of the languages like Java, C++ provide provision to sort a subarray in a specified order. In this post, a different solution is discussed that modifies the original array.
Implementation:
C++
// C++ program to sort first half in increasing// order and second half in decreasing#include<bits/stdc++.h>using namespace std;void mySort(int arr[], int n){    sort(arr, arr+n/2);    sort(arr+n/2, arr+n, greater<int>());}int main(){    int arr[] = { 5, 4, 6, 2, 1, 3, 8, 9, 7 };    int n = sizeof(arr)/sizeof(arr[0]);    mySort(arr, n);    cout << "Modified Array : \n";    for (int i=0; i<n; i++)       cout << arr[i] << " ";    return 0;} | 
Java
// Java program to sort first half in increasing// order and second half in decreasingimport java.util.*;public class SortExample {    static void mySort(Integer[] arr)    {        int n = arr.length;        // Sort subarray from index 1 to 4, i.e.,        // only sort subarray {7, 6, 45, 21} and        // keep other elements as it is.        Arrays.sort(arr, 0, n / 2);        Arrays.sort(arr, n / 2, n, Collections.reverseOrder());    }    public static void main(String[] args)    {        // Our arr contains 8 elements        Integer[] arr = { 5, 4, 6, 2, 1, 3, 8, 9, 7 };        mySort(arr);        System.out.printf("Modified arr[] : %s",                          Arrays.toString(arr));    }} | 
Python 3
# Python3 program to sort first half in increasing# order and second half in decreasing# required sorting functiondef mySort( arr, n):         arr1 = arr[:n//2]    arr2 = arr[n//2:]    arr1.sort()    arr2.sort(reverse=True)    return arr1+arr2          # driving functionif __name__=='__main__':    arr= [5, 4, 6, 2, 1, 3, 8, 9, 7 ]    n = len(arr)    arr=mySort(arr, n)    print( "Modified Array : ")    print(arr)# this code is contributed by ash264 | 
C#
// C# program to sort first half in increasing// order and second half in decreasingusing System;public class SortExample{    static void mySort(int[] arr)    {        int n = arr.Length;        // Sort subarray from index 1 to 4, i.e.,        // only sort subarray {7, 6, 45, 21} and        // keep other elements as it is.        Array.Sort(arr, 0, n / 2);        Array.Sort(arr, n / 2, (n/2)+1);        Array.Reverse(arr, n / 2, (n/2)+1);    }    // Driver code    public static void Main(String[] args)    {        // Our arr contains 8 elements        int[] arr = { 5, 4, 6, 2, 1, 3, 8, 9, 7 };        mySort(arr);        Console.Write("Modified arr[] : {0}",                        String.Join(" ",arr));    }}/* This code contributed by PrinciRaj1992 */ | 
PHP
<?php// PHP program to sort first half in increasing// order and second half in decreasingfunction mySort(&$arr, $n){    $array1 = array_slice($arr, 0,                    floor($n / 2));    $array2 = array_slice($arr, $n / 2);    sort($array1);    rsort($array2);    $arr = array_merge($array1, $array2);}// Driver Code$arr = array(5, 4, 6, 2, 1, 3, 8, 9, 7);$n = sizeof($arr);mySort($arr, $n);echo "Modified array :\n";for($i = 0; $i < $n; $i++)    echo $arr[$i] . " ";// This code is contributed by ita_c?> | 
Javascript
<script>// Javascript program to sort// first half in increasing// order and second half in decreasing         function mySort(arr)    {        let n = arr.length;           // Sort subarray from index 1 to 4, i.e.,        // only sort subarray {7, 6, 45, 21} and        // keep other elements as it is.                 let arr1=arr.slice(0,Math.floor(n/2)).        sort(function(a,b){return a-b;});        let arr2=arr.slice(Math.floor(n/2),        Math.floor(n/2)+n).sort(function(a,b)        {return b-a;})        return arr1.concat(arr2)    }         // Our arr contains 8 elements    let arr=[5, 4, 6, 2, 1, 3, 8, 9, 7];    arr=mySort(arr);    document.write("Modified arr : <br>"+arr.join(" "));     // This code is contributed by rag2127</script> | 
Output
Modified Array : 2 4 5 6 9 8 7 3 1
Complexity Analysis:
- Time Complexity: O(N*logN)
 - Auxiliary Space: O(1)
 
Alternate Solution:
- Sort the whole array in ascending order.
 - Reverse the second half after sorting.
 
Implementation:
C++
// C++ program to sort first half in increasing// order and second half in decreasing#include<bits/stdc++.h>using namespace std;void mySort(int arr[], int n){    // Sort the first half    sort(arr, arr+n/2);    sort(arr+n/2, arr+n);    reverse(arr+n/2, arr+n);}int main(){    int arr[] = { 5, 4, 6, 2, 1, 3, 8, 9, 7 };    int n = sizeof(arr)/sizeof(arr[0]);    mySort(arr, n);    cout << "Modified Array : \n";    for (int i=0; i<n; i++)       cout << arr[i] << " ";    return 0;} | 
Java
// Java program to sort first half in increasing// order and second half in decreasingimport java.util.*;public class SortExample {    static void mySort(Integer[] arr)    {        int n = arr.length;                 // Sort the whole array        Arrays.sort(arr, 0, n/2);        Arrays.sort(arr, n/2, n);        // Reverse the second half        int low = n/2, high = n-1;        while (low < high)        {            Integer temp = arr[low];            arr[low] = arr[high];            arr[high] = temp;            low++; high--;        }     }    public static void main(String[] args)    {        // Our arr contains 8 elements        Integer[] arr = { 5, 4, 6, 2, 1, 3, 8, 9, 7 };        mySort(arr);        System.out.printf("Modified arr[] : %s",                          Arrays.toString(arr));    }} | 
Python3
# Python3 program to sort first half in increasing# order and second half in decreasingdef mySort(arr):    n = len(arr);    # Sort the whole array    arr1 = arr[:n // 2]    arr2 = arr[n // 2:]    arr1.sort()    arr2.sort()    arr = arr1 + arr2    # Reverse the second half    low = n // 2;    high = n - 1;    while (low < high):        temp = arr[low];        arr[low] = arr[high];        arr[high] = temp;        low += 1;        high -= 1;    return arr;# Driver codeif __name__ == '__main__':         # Our arr contains 8 elements    arr = [5, 4, 6, 2, 1, 3, 8, 9, 7];    arr = mySort(arr);    print("Modified Array : ")    print(arr)# This code is contributed by 29AjayKumar | 
C#
// C# program to sort first half in increasing// order and second half in decreasingusing System;public class SortExample{    static void mySort(int[] arr)    {        int n = arr.Length;                 // Sort the whole array        Array.Sort(arr, 0, n/2);        Array.Sort(arr, n/2, n/2+1);        // Reverse the second half        int low = n/2, high = n-1;        while (low < high)        {            int temp = arr[low];            arr[low] = arr[high];            arr[high] = temp;            low++; high--;        }    }    // Driver code    public static void Main(String[] args)    {        // Our arr contains 8 elements        int[] arr = { 5, 4, 6, 2, 1, 3, 8, 9, 7 };        mySort(arr);        Console.WriteLine("Modified arr[] : {0}",                        String.Join(", ",arr));    }}// This code has been contributed by 29AjayKumar | 
Javascript
<script>// Javascript program to sort first half in increasing// order and second half in decreasing         function mySort(arr)    {        let n = arr.length;                    // Sort the whole array          let arr1=arr.slice(0,Math.floor(n/2)).sort(function(a,b){return a-b;});        let arr2=arr.slice(Math.floor(n/2),n).sort(function(a,b){return a-b;});        arr=arr1.concat(arr2);           // Reverse the second half        let low = Math.floor(n/2), high = n-1;        while (low < high)        {            let temp = arr[low];            arr[low] = arr[high];            arr[high] = temp;            low++; high--;        }        return arr;    }         let arr=[5, 4, 6, 2, 1, 3, 8, 9, 7 ];    arr=mySort(arr);    document.write("Modified arr : "+arr.join(" "));     // This code is contributed by avanitrachhadiya2155</script> | 
Output
Modified Array : 2 4 5 6 9 8 7 3 1
Complexity Analysis:
- Time Complexity: O(N*logN)
 - Auxiliary Space: O(1)
 
				
					


