Sorting all array elements except one
Given an array, a positive integer, sort the array in ascending order such that the element at index K in the unsorted array stays unmoved and all other elements are sorted.
Examples:
Input : arr[] = {10, 4, 11, 7, 6, 20}
k = 2;
Output : arr[] = {4, 6, 11, 7, 10, 20}
Input : arr[] = {30, 20, 10}
k = 0
Output : arr[] = {30, 10, 20}
A simple solution is to copy all elements except k-th of a given array to another array. Then sort the other array using a sorting algorithm. Finally, again copy the sorted array to the original array. While copying, skip k-th element.
Below is an efficient solution.
- Swap k-th element with the last element.
- Sort all elements except the last.
- For every element from (k+1)-th to last, move them one position ahead.1
- Copy k-th element back to position k.
C++
#include <bits/stdc++.h>
using namespace std;
int sortExceptK( int arr[], int k, int n)
{
swap(arr[k], arr[n-1]);
sort(arr, arr + n - 1);
int last = arr[n-1];
for ( int i=n-1; i>k; i--)
arr[i] = arr[i-1];
arr[k] = last;
}
int main()
{
int a[] = {10, 4, 11, 7, 6, 20 };
int k = 2;
int n = sizeof (a) / sizeof (a[0]);
sortExceptK(a, k, n);
for ( int i = 0; i < n; i++)
cout << a[i] << " " ;
}
|
Java
import java.util.Arrays;
class GFG {
static int sortExceptK( int arr[], int k, int n)
{
int temp = arr[k];
arr[k] = arr[n- 1 ];
arr[n- 1 ] = temp;
Arrays.sort(arr, 0 , n- 1 );
int last = arr[n- 1 ];
for ( int i = n- 1 ; i > k; i--)
arr[i] = arr[i- 1 ];
arr[k] = last;
return 0 ;
}
public static void main (String[] args)
{
int a[] = { 10 , 4 , 11 , 7 , 6 , 20 };
int k = 2 ;
int n = a.length;
sortExceptK(a, k, n);
for ( int i = 0 ; i < n; i++)
System.out.print(a[i] + " " );
}
}
|
Python3
def sortExcept(arr, k, n):
arr[k], arr[ - 1 ] = arr[ - 1 ], arr[k]
arr = sorted (arr, key = lambda i: (i is arr[ - 1 ], i))
last = arr[ - 1 ]
i = n - 1
while i > k:
arr[i] = arr[i - 1 ]
i - = 1
arr[k] = last
return arr
if __name__ = = '__main__' :
a = [ 10 , 4 , 11 , 7 , 6 , 20 ]
k = 2
n = len (a)
a = sortExcept(a, k, n)
print ( " " .join( list ( map ( str , a))))
|
C#
using System;
public class GFG {
static int sortExceptK( int [] arr, int k, int n)
{
int temp = arr[k];
arr[k] = arr[n - 1];
arr[n - 1] = temp;
Array.Sort(arr, 0, n - 1);
int last = arr[n - 1];
for ( int i = n - 1; i > k; i--)
arr[i] = arr[i - 1];
arr[k] = last;
return 0;
}
public static void Main()
{
int [] a = { 10, 4, 11, 7, 6, 20 };
int k = 2;
int n = a.Length;
sortExceptK(a, k, n);
for ( int i = 0; i < n; i++)
Console.Write(a[i] + " " );
}
}
|
PHP
<?php
function sortExceptK(& $arr , $k , $n )
{
$t = $arr [ $k ];
$arr [ $k ] = $arr [ $n - 1];
$arr [ $n - 1] = $t ;
$t = $arr [ count ( $arr ) - 1];
$arr = array_slice ( $arr , 0, -1);
sort( $arr );
array_push ( $arr , $t );
$last = $arr [ $n - 1];
for ( $i = $n - 1; $i > $k ; $i --)
$arr [ $i ] = $arr [ $i - 1];
$arr [ $k ] = $last ;
}
$a = array (10, 4, 11,
7, 6, 20 );
$k = 2;
$n = count ( $a );
sortExceptK( $a , $k , $n );
for ( $i = 0; $i < $n ; $i ++)
echo ( $a [ $i ]. " " );
?>
|
Javascript
<script>
function sortExceptK(arr, k, n)
{
let temp = arr[k];
arr[k] = arr[n-1];
arr[n-1] = temp;
arr.sort( function (a, b){
return a - b});
let last = arr[n-1];
for (let i = n-1; i > k; i--)
arr[i] = arr[i-1];
arr[k] = last;
temp = arr[k];
arr[k] = arr[n-1];
arr[n-1] = temp;
return 0;
}
let a = [10, 4, 11, 7, 6, 20 ];
let k = 2;
let n = a.length;
sortExceptK(a, k, n);
for (let i = 0; i < n; i++)
document.write(a[i] + " " );
</script>
|
Time Complexity: O(n*log(n)) where n is the number of elements.
Auxiliary Space: O(1)
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...