# C++ Program for Sorting all array elements except one

• Last Updated : 23 May, 2022

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 code` `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] << ``" "``;` `}`

Output:

`4 6 11 7 10 20 `

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

Please refer complete article on Sorting all array elements except one for more details!

My Personal Notes arrow_drop_up
Related Articles