Sort an array which contain 1 to n values

You have given an array which contain 1 to n element, your task is to sort this array in an efficient way and without replace with 1 to n numbers.

Examples:

Input : arr[] = {10, 7, 9, 2, 8, 
                 3, 5, 4, 6, 1};
Output : 1 2 3 4 5 6 7 8 9 10


Native approach :
Sort this array with the use of any type of sorting method. it takes O(nlogn) minimum time.

Efficient approach :
Replace every element with it’s position. it takes O(n) efficient time and give you the sorted array. Let’s understand this approach with the code below.

// Efficient C++ program to sort an array of
// numbers in range from 1 to n.
#include <iostream>
using namespace std;

// function for sort array
void sortit(int arr[], int n)
{
    for (int i = 0; i < n; i++) {

        // replace this element with it's position
        // while element not get the position
        // swap this element to it's position
        while (i != (arr[i] - 1)) 
            swap(arr[i], arr[arr[i] - 1]);        
    }
}

// Driver code
int main()
{
    int arr[] = { 10, 7, 9, 2, 8, 3, 5, 4, 6, 1 };
    int n = sizeof(arr) / sizeof(arr[0]);

    // for sort an array
    sortit(arr, n);

    // for print all the element in sorted way
    for (int i = 0; i < n; i++) 
        cout << arr[i] << " ";    
}
Output:

1 2 3 4 5 6 7 8 9 10




Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Recommended Posts:



2.3 Average Difficulty : 2.3/5.0
Based on 15 vote(s)