给定一个整数数组,将数组的前半部分按升序排序,后半部分按降序排序。
null
例如:
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 }
我们讨论了一种只打印所需订单的解决方案 按升序对前半部分进行排序,按降序对后半部分进行排序|集1
简单方法 这个想法很简单,我们使用库函数对前半部分按递增顺序排序,对后半部分按递减顺序排序。大多数语言,如java、C++提供了按指定顺序对子数组进行排序的方法。在这篇文章中,我们将讨论一种修改原始数组的不同解决方案。
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 : " ; 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 decreasing import 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 function def mySort( arr, n): arr1 = arr[:n / / 2 ] arr2 = arr[n / / 2 :] arr1.sort() arr2.sort(reverse = True ) return arr1 + arr2 # driving function if __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 decreasing using 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 decreasing function 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 :" ; 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> |
输出:
Modified array :2 4 5 6 9 8 7 3 1
替代方案 1) 按升序对整个数组排序。 2) 排序后倒转下半部分。
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 : " ; 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 decreasing import 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 decreasing def 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 code if __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 decreasing using 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> |
输出:
Modified arr[] : [2, 4, 5, 6, 9, 8, 7, 3, 1]
两种方法的时间复杂度均为O(n logn)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END