Last Updated: 8 Dec, 2020

Minimum number of swaps required to sort an array

Easy
Asked in companies
IBMHikeSamsung

Problem statement

You have been given an array 'ARR' of 'N' distinct elements.

Your task is to find the minimum no. of swaps required to sort the array.

For example:
For the given input array [4, 3, 2, 1], the minimum no. of swaps required to sort the array is 2, i.e. swap index 0 with 3 and 1 with 2 to form the sorted array [1, 2, 3, 4].
Input Format:
The first line of input contains an integer ‘T’ representing the number of test cases. Then the test cases follow.

The first line of each test case contains an integer ‘N’ representing the size of the input array.

The second line of each test case contains the 'N' elements of the array separated by a single space.
Output Format:
For each test case, print a single line containing a single integer which represents the minimum no. of swaps required to sort the array.

The output for each test case is in a separate line.
Note:
You do not need to print anything; it has already been taken care of. Just implement the given function.
Constraints:
1 <= T <= 100
1 <= N <= 1000
0 <= ARR[i] <= 10 ^ 9

Where 'ARR[i]' is the value of the input array elements.

Time Limit: 1 sec

Approaches

01 Approach

While iterating over the array, check the current element, and if not in the correct place, replace that element with the index of the element which should have come in this place.

 

Below is the algorithm:

  1. Create a copy of the given input array and store it in temp.
  2. Sort the temp array.
  3. Iterate over the input array, and check whether the current element is at the right place or not by comparing it with temp[i].
    1. If it is the right place, no need to do anything.
    2. Else, increase the count by 1 and swap the current element with the right index. So that array will remain sorted till index i.

02 Approach

The basic idea is to make a new array (called temp), which is a sorted form of the input array. We know that we need to transform the input array to the new array (temp) in the minimum number of swaps. Make a map that stores the elements and their corresponding index, of the input array. So at each i starting from 0 to N is in the given array, where N is the size of the array:

 

  1. If i is not in its correct position according to the sorted array, then
  2. We will fill this position with the correct element from the hashmap we built earlier. We know the correct element which should come here is temp[i], so we look up the index of this element from the hashmap.
  3. After swapping the required elements, we update the content of the hashmap accordingly, as temp[i] to the ith position, and arr[i] to where temp[i] was earlier.