Open In App

Sort an array which contain 1 to n values

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Share
Report issue
Report

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 (Using Cyclic Sort):

Idea: 

The given array contains number in the range [1 to n]  so we can use cyclic sort 

Follow the steps mentioned below to solve the problem

  • Traverse the array 
    • Check if the array is at correct position
    • Else swap the element to the element at its correct position

Below is the code implementation of the above approach:

C++




#include <bits/stdc++.h>
using namespace std;
 
// Function to sort the array
void sort(int arr[], int n)
{
  int i = 0;
  while (i < n) {
 
    // Finding the correct index
    int correct = arr[i] - 1;
 
    // Element index and value not match
    // then swapping
    if (arr[correct] != arr[i]) {
 
      // Calling swap function
      swap(arr[i], arr[correct]);
    }
    else {
      i++;
    }
  }
}
 
// Function to swap values
void swap(int& a, int& b)
{
  int temp = a;
  a = b;
  b = temp;
}
 
// Driver Code
int main()
{
  int arr[] = {3, 2, 5, 6, 1, 4};
  int n = sizeof(arr) / sizeof(arr[0]);
 
  // Function call
  sort(arr, n);
 
  // Printing the answer
  for (int i = 0; i < n; i++)
    cout << arr[i] << " ";
  return 0;
}
// This code contributed by Srj_27


Java




/*package whatever //do not write package name here */
 
import java.io.*;
import java.util.Arrays;
class GFG {
 
      // Driver Code
    public static void main(String[] args)
    {
        int[] arr = { 3, 2, 5, 6, 1, 4 };
         
          // Function call
          sort(arr);
 
        // Printing the answer
        System.out.println(Arrays.toString(arr));
    }
    static void sort(int[] arr)
    {
        int i = 0;
        while (i < arr.length) {
 
            // Finding the correct index
            int correct = arr[i] - 1;
 
            // Element index and value not match
            // then swapping
            if (arr[correct] != arr[i]) {
 
                // Calling swap function
                swap(arr, i, correct);
            }
            else {
                i++;
            }
        }
    }
 
    // Function to swap values
    static void swap(int[] arr, int first, int second)
    {
        int temp = arr[first];
        arr[first] = arr[second];
        arr[second] = temp;
    }
}
// This code is contributed by Karan Hora


Python3




# Function to sort the array
def sort(arr, n):
    i = 0
    while(i < n):
        # finding the corrent index
        correct = arr[i]-1
 
        # Element index and value not match
        # then swapping
        if arr[correct] != arr[i]:
            # calling swap function
            swap(arr, i, correct)
        else:
            i = i + 1
 
# function to swap values
def swap(arr, first, second):
    temp = arr[first]
    arr[first] = arr[second]
    arr[second] = temp
 
# Driver Code
arr = [3, 2, 5, 6, 1, 4]
n = len(arr)
 
# function call
sort(arr, n)
 
# printing the answer
for i in range(0, n):
    print(arr[i], end=" ")
 
# This code is contributed by Yash Agarwal(yashagarwal2852002)


Javascript




// Function to sort the array
     function sort(arr, n) {
       var i = 0;
       while (i < n) {
         // Finding the correct index
         var correct = arr[i] - 1;
 
         // Element index and value not match
         // then swapping
         if (arr[correct] != arr[i]) {
           // Calling swap function
           swap(arr, i, correct);
         } else {
           i++;
         }
       }
     }
 
     // Function to swap values
     function swap(arr, i, correct) {
       var temp = arr[i];
       arr[i] = arr[correct];
       arr[correct] = temp;
     }
 
     // Driver Code
 
     var arr = [3, 2, 5, 6, 1, 4];
     var n = 6;
 
     // Function call
     sort(arr, n);
 
     // Printing the answer
     for (var i = 0; i < n; i++) {
       console.log(arr[i]);
     }


C#




// C# code of the above approach
using System;
 
class MainClass
{
    // Function to sort the array
    static void sort(int[] arr, int n)
    {
        int i = 0;
       
        while (i < n)
        {
             // Finding the correct index
             int correct = arr[i] - 1;
 
             // Element index and value not match
             // then swapping
             if (arr[correct] != arr[i])
             {
                // Calling swap function
                 swap(ref arr[i], ref arr[correct]);
             }
             else
             {
                 i++;
             }
        }
    }
 
    // Function to swap values
    static void swap(ref int a, ref int b)
    {
        int temp = a;
        a = b;
        b = temp;
    }
 
    // Driver Code
    public static void Main()
    {
        int[] arr = { 3, 2, 5, 6, 1, 4 };
        int n = arr.Length;
 
        // Function call
        sort(arr, n);
 
        // Printing the answer
        for (int i = 0; i < n; i++)
            Console.Write(arr[i] + " ");
    }
}
 
// This code is contributed by nikhilsainiofficial546


Output

[1, 2, 3, 4, 5, 6]

Time Complexity: O(n)
Auxiliary Space: O(1)



Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads