# Minimum number of swaps required to sort an array | Set 2

Given an array of N distinct elements, find the minimum number of swaps required to sort the array.

Note: The problem is not asking to sort the array by the minimum number of swaps. The problem is to find the minimum swaps in which the array can be sorted.

Examples:

Input : arr[] = {4, 3, 2, 1}
Output : 2
Explanation : Swap index 0 with 3 and 1 with 2 to get the sorted array {1, 2, 3, 4}.

Input : arr[] = { 3, 5, 2, 4, 6, 8}
Output : 3

## Recommended: Please try your approach on {IDE} first, before moving on to the solution.

This problem is already discussed in the previous article using graph. In this article another approach to solve this problem is discussed which is slightly different from the cycle approach.

The idea is to create a vector of pair in C++ with first element as array values and second element as array indices. The next step is to sort the vector of pair according to the first element of the pair. After that traverse the vector and check if the index mapped with the value is correct or not, if not then keep swapping until the element is placed correctly and keep counting the number of swaps.

Below is the implementation of the above approach:

## CPP

 `// CPP program to find the minimum number  ` `// of swaps required to sort an array ` `// of distinct element ` ` `  `#include ` `using` `namespace` `std; ` ` `  `// Function to find minimum swaps to  ` `// sort an array ` `int` `findMinSwap(``int` `arr[] , ``int` `n) ` `{ ` `    ``// Declare a vector of pair      ` `    ``vector> vec(n); ` `     `  `    ``for``(``int` `i=0;i

## Python3

 `# Python3 program to find the minimum number ` `# of swaps required to sort an array ` `# of distinct element ` ` `  `# Function to find minimum swaps to ` `# sort an array ` `def` `findMinSwap(arr, n): ` `     `  `    ``# Declare a vector of pair ` `    ``vec ``=` `[] ` ` `  `    ``for` `i ``in` `range``(n): ` `        ``vec.append([arr[i], i]) ` ` `  `    ``# Sort the vector w.r.t the first ` `    ``# element of pair ` `    ``vec ``=` `sorted``(vec) ` ` `  `    ``ans, c, j ``=` `-``1``, ``0``, ``0` ` `  `    ``for` `i ``in` `range``(n): ` `         `  `        ``# If the element is already placed ` `        ``# correct, then continue ` `        ``if``(vec[i][``1``] ``=``=` `i): ` `            ``continue` `        ``else``: ` `            ``# swap with its respective index ` `            ``vec[i][``0``], vec[vec[i][``1``]][``1``] ``=` `\ ` `                ``vec[vec[i][``1``]][``1``], vec[i][``0``] ` `            ``vec[i][``1``], vec[vec[i][``1``]][``1``] ``=` `\ ` `                ``vec[vec[i][``1``]][``1``], vec[i][``1``] ` ` `  `        ``# swap until the correct ` `        ``# index matches ` `        ``if``(i !``=` `vec[i][``1``]): ` `            ``i ``-``=` `1` ` `  `        ``# each swap makes one element ` `        ``# move to its correct index, ` `        ``# so increment answer ` `        ``ans ``+``=` `1` ` `  `    ``return` `ans ` ` `  `# Driver code ` `arr ``=` `[``1``, ``5``, ``4``, ``3``, ``2``] ` `n ``=` `len``(arr) ` `print``(findMinSwap(arr,n)) ` ` `  `# This code is contributed by mohit kumar 29 `

Output:

```2
```

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 Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.

Improved By : mohit kumar 29

Article Tags :
Practice Tags :

6

Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.