GeeksforGeeks App
Open App
Browser
Continue

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.

1. Swap k-th element with the last element.
2. Sort all elements except the last.
3. For every element from (k+1)-th to last, move them one position ahead.1
4. Copy k-th element back to position k.

C++

 // CPP program to sort all elements except// element at index k.#include using namespace std; int sortExceptK(int arr[], int k, int n){    // Move k-th element to end    swap(arr[k], arr[n-1]);     // Sort all elements except last    sort(arr, arr + n - 1);     // Store last element (originally k-th)    int last = arr[n-1];     // Move all elements from k-th to one    // position ahead.    for (int i=n-1; i>k; i--)       arr[i] = arr[i-1];     // Restore k-th element    arr[k] = last;} // Driver codeint 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

 // Java program to sort all elements except// element at index k.import java.util.Arrays; class GFG {         static int sortExceptK(int arr[], int k, int n)    {                 // Move k-th element to end        int temp = arr[k];        arr[k] = arr[n-1];        arr[n-1] = temp;             // Sort all elements except last        Arrays.sort(arr, 0, n-1);             // Store last element (originally k-th)        int last = arr[n-1];             // Move all elements from k-th to one        // position ahead.        for (int i = n-1; i > k; i--)        arr[i] = arr[i-1];             // Restore k-th element        arr[k] = last;        return 0;    }         //Driver code    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] + " ");    }} //This code is contributed by Anant Agarwal.

Python3

 # Python3 program to sort all elements except# element at index k.def sortExcept(arr, k, n):     # Move k-th element to end    arr[k], arr[-1] = arr[-1], arr[k]     # Sort all elements except last    arr = sorted(arr, key = lambda i: (i is arr[-1], i))         # Store last element (originally k-th)    last = arr[-1]     # Move all elements from k-th to one    # position ahead.    i = n - 1    while i > k:        arr[i] = arr[i - 1]        i -= 1     # Restore k-th element    arr[k] = last    return arr # Driver codeif __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))))     # This code is contributed by Shivam Singh.

C#

 // C# program to sort all elements except// element at index k.using System; public class GFG {         static int sortExceptK(int[] arr, int k, int n)    {        // Move k-th element to end        int temp = arr[k];        arr[k] = arr[n - 1];        arr[n - 1] = temp;         // Sort all elements except last        Array.Sort(arr, 0, n - 1);         // Store last element (originally k-th)        int last = arr[n - 1];         // Move all elements from k-th to one        // position ahead.        for (int i = n - 1; i > k; i--)            arr[i] = arr[i - 1];         // Restore k-th element        arr[k] = last;                 return 0;    }         // Driver code    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] + " ");    }} // This article is contributed by shiv_bhakt

PHP

 \$k; \$i--)    \$arr[\$i] = \$arr[\$i - 1];     // Restore k-th element    \$arr[\$k] = \$last;} // Driver code\$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]." ");     // This code is contributed by// Manish Shaw(manishshaw1)?>

Javascript



Output:

4 6 11 7 10 20

Time Complexity: O(n*log(n)) where n is the number of elements.
Auxiliary Space: O(1)

My Personal Notes arrow_drop_up