Given an array of size n, arrange the first k elements of the array in ascending order and the remaining n-k elements in descending order.
Examples:
Input: arr[] = {5, 4, 6, 2, 1, 3, 8, 9, -1}, k = 4 Output: 2 4 5 6 9 8 3 1 -1
Input: arr[] = {5, 4, 6}, k = 2 Output: 4 5 6
Algorithm:
- Store the first k elements in an array and sort that in ascending order.
- Store the remaining n-k elements in an array and sort that in descending order.
- Merge the two arrays by adding the elements from the second array in reverse order.
C++
<?php
function printOrder( $arr , $n , $k )
{
$len1 = $k ;
$len2 = $n - $k ;
$arr1 = array_fill (0, $k , 0);
$arr2 = array_fill (0, ( $n - $k ), 0);
for ( $i = 0; $i < $k ; $i ++)
$arr1 [ $i ] = $arr [ $i ];
for ( $i = $k ; $i < $n ; $i ++)
$arr2 [ $i - $k ] = $arr [ $i ];
sort( $arr1 );
sort( $arr2 );
for ( $i = 0; $i < $n ; $i ++)
if ( $i < $k )
$arr [ $i ] = $arr1 [ $i ];
else
{
$arr [ $i ] = $arr2 [ $len2 - 1];
$len2 -= 1;
}
for ( $i = 0; $i < $n ; $i ++)
print ( $arr [ $i ] . " " );
}
$arr = array ( 5, 4, 6, 2, 1, 3, 8, 9, -1 );
$k = 4;
$n = count ( $arr );
printOrder( $arr , $n , $k );
?>
|
Javascript
<?php
function printOrder( $arr , $n , $k )
{
$a = array_slice ( $arr , 0, $k );
sort( $a );
$b = array_slice ( $arr , $k , $n );
sort( $b );
$b = array_reverse ( $b );
unset( $arr );
$arr = $a ;
return array_merge ( $arr , $b );
}
$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 ]. " " ;
?>
|
Javascript
<script>
function printOrder(arr, k)
{
let n = arr.length;
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;
}
let arr = [ 5, 4, 6, 2, 1, 3, 8, 9, -1 ];
let k = 4;
arr = printOrder(arr, k);
document.write(arr.join( " " ));
</script>
|
Output:
2 4 5 6 9 8 3 1 -1
Time Complexity: O(N * log(N)) Auxiliary Space: O(1)
|