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

Greedy

# Python3 program to find
# minimum number of swaps
# required to sort an array
 
# Return the minimum number
# of swaps required to sort
# the array
 
 
def minSwaps(arr, N):
 
	ans = 0
	temp = arr.copy()
	temp.sort()
	for i in range(N):
 
		# This is checking whether
		# the current element is
		# at the right place or not
		if (arr[i] != temp[i]):
			ans += 1
 
			# Swap the current element
			# with the right index
			# so that arr[0] to arr[i]
			# is sorted
			swap(arr, i,
				indexOf(arr, temp[i]))
 
	return ans
 
 
def swap(arr, i, j):
 
	temp = arr[i]
	arr[i] = arr[j]
	arr[j] = temp
 
 
def indexOf(arr, ele):
 
	for i in range(len(arr)):
		if (arr[i] == ele):
			return i
	return -1
 
 
# Driver code
if __name__ == "__main__":
	a = [101, 758, 315, 730,
		472, 619, 460, 479]
	n = len(a)
 
	# Output will be 5
	print(minSwaps(a, n))