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.

C++

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

Java

// Efficient Java program to sort an 
// array of numbers in range from 1
// to n.
import java.io.*;
import java.util.*;

public class GFG {
    
    //swap function
    public static int swap(int itself,
                            int dummy)
    {
        return itself;
    }
    
    // function for sort array
    static 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)) 
                arr[i] = swap(arr[arr[i] - 1],
                    arr[arr[i] - 1] = arr[i]);     
        }
    }
    
    // Driver code
    public static void main(String args[])
    {
        int []arr = {10, 7, 9, 2, 8, 
                              3, 5, 4, 6, 1};
        int n = arr.length;
    
        // for sort an array
        sortit(arr, n);
    
        // for print all the 
        // element in sorted way
        for (int i = 0; i < n; i++) 
            System.out.print(arr[i] + " "); 
    }
}

// This code is contributed by Manish Shaw 
// (manishshaw1)

C#

// Efficient C# program to sort an array of
// numbers in range from 1 to n.
using System;
using System.Collections.Generic;

class GFG {
    
    //swap function
    static void swap(ref int a, ref int b)
    {
        int value = a;
        a = b;
        b = value;
    }
    
    // function for sort array
    static 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(ref arr[i], ref arr[arr[i] - 1]);     
        }
    }
    
    // Driver code
    public static void Main()
    {
        int []arr = {10, 7, 9, 2, 8, 
                      3, 5, 4, 6, 1};
        int n = arr.Length;
    
        // for sort an array
        sortit(arr, n);
    
        // for print all the 
        // element in sorted way
        for (int i = 0; i < n; i++) 
            Console.Write(arr[i] + " "); 
    }
}

// This code is contributed by 
// Manish Shaw (manishshaw1)

PHP

<?php
// Efficient PHP program to sort an 
// array of numbers in range from 1 to n.

function swap(&$x, &$y)
{
    $x ^= $y ^= $x ^= $y;
}

// function for sort array
function sortit(&$arr, $n)
{
    for ($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
$arr = array(10, 7, 9, 2, 8, 
             3, 5, 4, 6, 1);
$n = count($arr);

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

// for print all the
// element in sorted way
for ($i = 0; $i < $n; $i++) 
    echo $arr[$i]." ";

//This code is contributed by Manish Shaw
//(manishshaw1)
?>


Output :

1 2 3 4 5 6 7 8 9 10


My Personal Notes arrow_drop_up

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.


Improved By : manishshaw1




Practice Tags :

Recommended Posts:



2.1 Average Difficulty : 2.1/5.0
Based on 21 vote(s)






User Actions