给定一个大小为n的数组,将数组的前k个元素按升序排列,其余n-k个元素按降序排列。
null
例如:
输入: arr[]={5,4,6,2,1,3,8,9,-1},k=4 输出: 2 4 5 6 9 8 3 1 -1
输入: arr[]={5,4,6},k=2 输出: 4 5 6
算法:
- 将前k个元素存储在一个数组中,并按升序排序。
- 将剩余的n-k元素存储在一个数组中,并按降序排序。
- 通过按相反顺序添加第二个数组中的元素来合并这两个数组。
C++
// C++ program to sort first k elements // in increasing order and remaining // n-k elements in decreasing #include <bits/stdc++.h> using namespace std; // Function to sort the array void printOrder( int arr[], int n, int k) { int len1 = k, len2 = n - k; int arr1[k], arr2[n - k]; // Store the k elements in an array for ( int i = 0; i < k; i++) arr1[i] = arr[i]; // Store the remaining n-k elements in an array for ( int i = k; i < n; i++) arr2[i - k] = arr[i]; // sorting the array from 0 to k-1 places sort(arr1, arr1 + len1); // sorting the array from k to n places sort(arr2, arr2 + len2); // storing the values in the final array arr for ( int i = 0; i < n; i++) { if (i < k) arr[i] = arr1[i]; else { arr[i] = arr2[len2 - 1]; len2--; } } // printing the array for ( int i = 0; i < n; i++) cout << arr[i] << " " ; } // Driver code int main() { int arr[] = { 5, 4, 6, 2, 1, 3, 8, 9, -1 }; int k = 4; int n = sizeof (arr) / sizeof (arr[0]); printOrder(arr, n, k); return 0; } |
JAVA
// Java program to sort first k elements // in increasing order and remaining // n-k elements in decreasing import java.util.*; class GFG { // function to print half of the array in // ascending order and the other half in // descending order static void printOrder( int [] arr, int n, int k) { int len1 = k, len2 = n - k; int [] arr1 = new int [k]; int [] arr2 = new int [n - k]; // Store the k elements in an array for ( int i = 0 ; i < k; i++) arr1[i] = arr[i]; // Store the remaining n-k elements in an array for ( int i = k; i < n; i++) arr2[i - k] = arr[i]; // sorting the array from 0 to k-1 places Arrays.sort(arr1, 0 , k); // sorting the array from k to n places Arrays.sort(arr2, k, n - k); // storing the values in the final array arr for ( int i = 0 ; i < n; i++) { if (i < k) arr[i] = arr1[i]; else { arr[i] = arr2[len2 - 1 ]; len2--; } } // printing the array for ( int i = 0 ; i < n; i++) { System.out.print(arr[i] + " " ); } } // Driver code public static void main(String[] args) { int arr[] = { 5 , 4 , 6 , 2 , 1 , 3 , 8 , 9 , - 1 }; int k = 4 ; int n = arr.length; printOrder(arr, n, k); } } |
Python3
# Python 3 program to sort first # k elements in increasing order # and remaining n-k elements in # decreasing # Function to sort the array def printOrder(arr, n, k): len1 = k len2 = n - k arr1 = [ 0 ] * k arr2 = [ 0 ] * (n - k) # Store the k elements # in an array for i in range (k): arr1[i] = arr[i] # Store the remaining n-k # elements in an array for i in range (k, n): arr2[i - k] = arr[i] # sorting the array from # 0 to k-1 places arr1.sort() # sorting the array from # k to n places arr2.sort() # storing the values in the # final array arr for i in range (n): if (i < k): arr[i] = arr1[i] else : arr[i] = arr2[len2 - 1 ] len2 - = 1 # printing the array for i in range (n): print (arr[i], end = " " ) # Driver code if __name__ = = "__main__" : arr = [ 5 , 4 , 6 , 2 , 1 , 3 , 8 , 9 , - 1 ] k = 4 n = len (arr) printOrder(arr, n, k) # This code is contributed # by ChitraNayal |
C#
// C# program to sort first k elements // in increasing order and remaining // n-k elements in decreasing using System; class GFG { // function to print half of the array in // ascending order and the other half in // descending order static void printOrder( int [] arr, int n, int k) { int len2 = n - k; int [] arr1 = new int [k]; int [] arr2 = new int [n - k]; // Store the k elements in an array for ( int i = 0; i < k; i++) arr1[i] = arr[i]; // Store the remaining n-k // elements in an array for ( int i = k; i < n; i++) arr2[i - k] = arr[i]; // sorting the array from // 0 to k-1 places Array.Sort(arr1, 0, k); // sorting the array from k to n places Array.Sort(arr2, 0, n - k); // storing the values in // the final array arr for ( int i = 0; i < n; i++) { if (i < k) arr[i] = arr1[i]; else { arr[i] = arr2[len2 - 1]; len2--; } } // printing the array for ( int i = 0; i < n; i++) { Console.Write(arr[i] + " " ); } } // Driver code public static void Main() { int [] arr = { 5, 4, 6, 2, 1, 3, 8, 9, -1 }; int k = 4; int n = arr.Length; printOrder(arr, n, k); } } // This code is contributed by Subhadeep |
PHP
<?php // PHP program to sort first // k elements in increasing order // and remaining n-k elements in // decreasing // Function to sort the array function printOrder( $arr , $n , $k ) { $len1 = $k ; $len2 = $n - $k ; $arr1 = array_fill (0, $k , 0); $arr2 = array_fill (0, ( $n - $k ), 0); // Store the k elements // in an array for ( $i = 0; $i < $k ; $i ++) $arr1 [ $i ] = $arr [ $i ]; // Store the remaining n-k // elements in an array for ( $i = $k ; $i < $n ; $i ++) $arr2 [ $i - $k ] = $arr [ $i ]; // sorting the array from // 0 to k-1 places sort( $arr1 ); // sorting the array from // k to n places sort( $arr2 ); // storing the values in the // final array arr for ( $i = 0; $i < $n ; $i ++) if ( $i < $k ) $arr [ $i ] = $arr1 [ $i ]; else { $arr [ $i ] = $arr2 [ $len2 - 1]; $len2 -= 1; } // printing the array for ( $i = 0; $i < $n ; $i ++) print ( $arr [ $i ] . " " ); } // Driver code $arr = array ( 5, 4, 6, 2, 1, 3, 8, 9, -1 ); $k = 4; $n = count ( $arr ); printOrder( $arr , $n , $k ); // This code is contributed by mits ?> |
Javascript
<script> // Javascript program to sort first k elements // in increasing order and remaining // n-k elements in decreasing // Function to print half of the array in // ascending order and the other half in // descending order function printOrder(arr, n, k) { let len1 = k, len2 = n - k; let arr1 = new Array(k); let arr2 = new Array(n - k); // Store the k elements in an array for (let i = 0; i < k; i++) arr1[i] = arr[i]; // Store the remaining n-k // elements in an array for (let i = k; i < n; i++) arr2[i - k] = arr[i]; // Sorting the array from 0 to k-1 places arr1.sort( function (a, b){ return a - b;}); // Sorting the array from k to n places arr2.sort( function (a, b){ return a - b;}); // Storing the values in the final array arr for (let i = 0; i < n; i++) { if (i < k) arr[i] = arr1[i]; else { arr[i] = arr2[len2 - 1]; len2--; } } // Printing the array for (let i = 0; i < n; i++) { document.write(arr[i] + " " ); } } // Driver code let arr = [ 5, 4, 6, 2, 1, 3, 8, 9, -1 ]; let k = 4; let n = arr.length; printOrder(arr, n, k); // This code is contributed by rag2127 </script> |
输出:
2 4 5 6 9 8 3 1 -1
时间复杂性: O(N*log(N)) 辅助空间: O(N)
有效方法: 其思想很简单,使用库函数对前k个元素按升序排序,其余n-k个元素按降序排序。
C++
// C++ program to sort first k elements // in increasing order and remaining // n-k elements in decreasing #include <bits/stdc++.h> using namespace std; // function to sort the array void printOrder( int arr[], int n, int k) { // Sort first k elements in ascending order sort(arr, arr + k); // Sort remaining n-k elements in descending order sort(arr + k, arr + n, greater< int >()); } // Driver code int main() { int arr[] = { 5, 4, 6, 2, 1, 3, 8, 9, -1 }; int k = 4; int n = sizeof (arr) / sizeof (arr[0]); printOrder(arr, n, k); for ( int i = 0; i < n; i++) cout << arr[i] << " " ; return 0; } |
JAVA
// Java program to sort first k elements // in increasing order and remaining // n-k elements in decreasing import java.util.*; public class SortExample { static void printOrder(Integer[] arr, int k) { int n = arr.length; // Sort first k elements in ascending order Arrays.sort(arr, 0 , k); // Sort remaining n-k elements in descending order Arrays.sort(arr, k, n, Collections.reverseOrder()); } public static void main(String[] args) { // Our arr contains 8 elements Integer[] arr = { 5 , 4 , 6 , 2 , 1 , 3 , 8 , 9 , - 1 }; int k = 4 ; printOrder(arr, k); System.out.printf( "%s" , Arrays.toString(arr)); } } |
Python3
# Python3 program to sort first k elements # in increasing order and remaining # n-k elements in decreasing # function to sort the array def printOrder(arr, n, k): # Sort first k elements in ascending order a = arr[ 0 :k]; a.sort(); # Sort remaining n-k elements in descending order b = arr[k:n]; b.sort(); b.reverse(); return a + b; # Driver code arr = [ 5 , 4 , 6 , 2 , 1 , 3 , 8 , 9 , - 1 ]; k = 4 ; n = len (arr); arr = printOrder(arr, n, k); for i in range (n): print (arr[i], end = " " ); # This code is contributed by mits |
C#
// C# program to sort first k elements // in increasing order and remaining // n-k elements in decreasing using System; public class SortExample { static void printOrder( int [] arr, int k) { int n = arr.Length; // Sort first k elements in ascending order Array.Sort(arr, 0, k); // Sort remaining n-k elements in descending order Array.Sort(arr, k, n - k); Array.Reverse(arr, k, n - k); } // Driver code public static void Main(String[] args) { // Our arr contains 8 elements int [] arr = { 5, 4, 6, 2, 1, 3, 8, 9, -1 }; int k = 4; printOrder(arr, k); Console.Write( "{0}" , String.Join( " " , arr)); } } // This code contributed by Rajput-Ji |
PHP
<?php // PHP program to sort first k elements // in increasing order and remaining // n-k elements in decreasing // function to sort the array function printOrder( $arr , $n , $k ) { // Sort first k elements in ascending order $a = array_slice ( $arr , 0, $k ); sort( $a ); // Sort remaining n-k elements in descending order $b = array_slice ( $arr , $k , $n ); sort( $b ); $b = array_reverse ( $b ); unset( $arr ); $arr = $a ; return array_merge ( $arr , $b ); } // Driver code $arr = array ( 5, 4, 6, 2, 1, 3, 8, 9, -1 ); $k = 4; $n = count ( $arr ); $arr =printOrder( $arr , $n , $k ); for ( $i = 0; $i < $n ; $i ++) echo $arr [ $i ]. " " ; // This code is contributed by mits ?> |
Javascript
<script> // Javascript program to sort first k elements // in increasing order and remaining // n-k elements in decreasing function printOrder(arr, k) { let n = arr.length; // Sort first k elements in ascending order // Sort remaining n-k elements in descending order arr = arr.slice(0, k).sort( function (a, b){ return a - b;}).concat( arr.slice(k, n).sort( function (a, b){ return b - a;})); return arr; } // Driver code // Our arr contains 8 elements let arr = [ 5, 4, 6, 2, 1, 3, 8, 9, -1 ]; let k = 4; arr = printOrder(arr, k); document.write(arr.join( " " )); // This code is contributed by avanitrachhadiya2155 </script> |
输出:
2 4 5 6 9 8 3 1 -1
时间复杂性: O(N*log(N)) 辅助空间: O(1)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END