Open In App

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 (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

Below is the code implementation of the above approach:




#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




/*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




# 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)




// 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# 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)


Article Tags :