Minimum number of swaps required to sort an array of first N number

16 Aug, 2021
Given an array arr[] of distinct integers from 1 to N. The task is to find the minimum number of swaps required to sort the array.  
Example:  
Input: arr[] = { 7, 1, 3, 2, 4, 5, 6 }
Output: 5
Explanation:
i           arr             swap (indices)
0   [7, 1, 3, 2, 4, 5, 6]   swap (0, 3)
1   [2, 1, 3, 7, 4, 5, 6]   swap (0, 1)
2   [1, 2, 3, 7, 4, 5, 6]   swap (3, 4)
3   [1, 2, 3, 4, 7, 5, 6]   swap (4, 5)
4   [1, 2, 3, 4, 5, 7, 6]   swap (5, 6)
5   [1, 2, 3, 4, 5, 6, 7]
Therefore, total number of swaps = 5

Input: arr[] = { 2, 3, 4, 1, 5 }
Output: 3
 
Approach:  
For each index in arr[].
Check if the current element is in it’s right position or not. Since the array contains distinct elements from 1 to N, we can simply compare the element with it’s index in array to check if it is at its right position.
If current element is not at it’s right position then swap the element with the element which has occupied its place.
Else check for next index.
Below is the implementation of the above approach:  
C++
Java
Python3
C#
Javascript
#include <iostream>using namespace std; // Function to find minimum swapsint minimumSwaps(int arr[],int n){    // Initialise count variable    int count = 0;    int i = 0;         while (i < n)    {         // If current element is        // not at the right position        if (arr[i] != i + 1)        {             while (arr[i] != i + 1)            {                int temp = 0;                 // Swap current element                // with correct position                // of that element                temp = arr[arr[i] - 1];                arr[arr[i] - 1] = arr[i];                arr[i] = temp;                count++;            }        }         // Increment for next index        // when current element is at        // correct position        i++;    }    return count;} // Driver codeint main(){    int arr[] = { 2, 3, 4, 1, 5 };     int n = sizeof(arr)/sizeof(arr[0]);         // Function to find minimum swaps    cout << minimumSwaps(arr,n) ;} // This code is contributed by AnkitRai01
// Java program to find the minimum// number of swaps required to sort// the given arrayimport java.io.*;import java.util.*; class GfG {     // Function to find minimum swaps    static int minimumSwaps(int[] arr)    {        // Initialise count variable        int count = 0;        int i = 0;        while (i < arr.length) {             // If current element is            // not at the right position            if (arr[i] != i + 1) {                 while (arr[i] != i + 1) {                    int temp = 0;                     // Swap current element                    // with correct position                    // of that element                    temp = arr[arr[i] - 1];                    arr[arr[i] - 1] = arr[i];                    arr[i] = temp;                    count++;                }            }             // Increment for next index            // when current element is at            // correct position            i++;        }        return count;    }     // Driver code    public static void main(String[] args)    {        int arr[] = { 2, 3, 4, 1, 5 };         // Function to find minimum swaps        System.out.println(minimumSwaps(arr));    }}
# Python3 program to find the minimum# number of swaps required to sort# the given array # Function to find minimum swapsdef minimumSwaps(arr):         # Initialise count variable    count = 0;    i = 0;    while (i < len(arr)):         # If current element is        # not at the right position        if (arr[i] != i + 1):             while (arr[i] != i + 1):                temp = 0;                 # Swap current element                # with correct position                # of that element                temp = arr[arr[i] - 1];                arr[arr[i] - 1] = arr[i];                arr[i] = temp;                count += 1;                     # Increment for next index        # when current element is at        # correct position        i += 1;         return count; # Driver codeif __name__ == '__main__':    arr = [ 2, 3, 4, 1, 5 ];     # Function to find minimum swaps    print(minimumSwaps(arr));     # This code is contributed by 29AjayKumar
// C# program to find the minimum// number of swaps required to sort// the given arrayusing System; class GfG{     // Function to find minimum swaps    static int minimumSwaps(int[] arr)    {        // Initialise count variable        int count = 0;        int i = 0;        while (i < arr.Length)        {             // If current element is            // not at the right position            if (arr[i] != i + 1)            {                 while (arr[i] != i + 1)                {                    int temp = 0;                     // Swap current element                    // with correct position                    // of that element                    temp = arr[arr[i] - 1];                    arr[arr[i] - 1] = arr[i];                    arr[i] = temp;                    count++;                }            }             // Increment for next index            // when current element is at            // correct position            i++;        }        return count;    }     // Driver code    public static void Main(String[] args)    {        int []arr = { 2, 3, 4, 1, 5 };         // Function to find minimum swaps        Console.WriteLine(minimumSwaps(arr));    }} // This code is contributed by 29AjayKumar
<script> // javascript program to find the minimum// number of swaps required to sort// the given array // Function to find minimum swapsfunction minimumSwaps(arr){    // Initialise count variable    let count = 0;    let i = 0;    while (i < arr.length)    {         // If current element is        // not at the right position        if (arr[i] != i + 1)        {             while (arr[i] != i + 1)            {                let temp = 0;                 // Swap current element                // with correct position                // of that element                temp = arr[arr[i] - 1];                arr[arr[i] - 1] = arr[i];                arr[i] = temp;                count++;            }        }         // Increment for next index        // when current element is at        // correct position        i++;    }    return count;} // Driver code let arr = [2, 3, 4, 1, 5 ]; // Function to find minimum swapsdocument.write(minimumSwaps(arr));  </script>
3
 
Time Complexity: O(N) where N is the size of array. Auxiliary Space: O(1)
29AjayKumar
ankthon
mohit kumar 29
anikakapoor
Natural Numbers
Arrays
Sorting
Arrays
Sorting
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Introduction to Arrays
Introduction to Data Structures
Find Second largest element in an array
Search an element in a sorted and rotated array
Window Sliding Technique
Merge Sort
Bubble Sort Algorithm
QuickSort
Insertion Sort
Selection Sort Algorithm