Number Of Swaps To Sort An Array L Code Example

Snippet 1

  // C++ program to find  minimum number of swaps 
// required to sort an array 
#include 
  
using namespace std; 
  
// Function returns the minimum number of swaps 
// required to sort the array 
int minSwaps(int arr[], int n) 
{ 
    // Create an array of pairs where first 
    // element is array element and second element 
    // is position of first element 
    pair arrPos[n]; 
    for (int i = 0; i < n; i++) 
    { 
        arrPos[i].first = arr[i]; 
        arrPos[i].second = i; 
    } 
  
    // Sort the array by array element values to 
    // get right position of every element as second 
    // element of pair. 
    sort(arrPos, arrPos + n); 
  
    // To keep track of visited elements. Initialize 
    // all elements as not visited or false. 
    vector vis(n, false); 
  
    // Initialize result 
    int ans = 0; 
  
    // Traverse array elements 
    for (int i = 0; i < n; i++) 
    { 
        // already swapped and corrected or 
        // already present at correct pos 
        if (vis[i] || arrPos[i].second == i) 
            continue; 
  
        // find out the number of  node in 
        // this cycle and add in ans 
        int cycle_size = 0; 
        int j = i; 
        while (!vis[j]) 
        { 
            vis[j] = 1; 
  
            // move to next node 
            j = arrPos[j].second; 
            cycle_size++; 
        } 
  
        // Update answer by adding current cycle.  
        if (cycle_size > 0) 
        { 
            ans += (cycle_size - 1); 
        } 
    } 
  
    // Return result 
    return ans; 
} 
  
// Driver program to test the above function 
int main() 
{ 
    int arr[] = {1, 5, 4, 3, 2}; 
    int n = (sizeof(arr) / sizeof(int)); 
    cout << minSwaps(arr, n); 
    return 0; 
} 
 

Snippet 2

  # Python3 program to find the minimum 
# number of swaps required to sort 
# the given array 
  
# Function to find minimum swaps 
def 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 code 
if __name__ == '__main__': 
    arr = [ 2, 3, 4, 1, 5 ]; 
  
    # Function to find minimum swaps 
    print(minimumSwaps(arr)); 
      
# This code is contributed by 29AjayKumar 
 

Copyright © Code Fetcher 2020

 

 

Leave a comment

Your email address will not be published. Required fields are marked *