Sorting/Cycle Sort/cppcylclesort.c
// Function sort the array using Cycle sort 
Function sort the array using Cycle sort
Function sort the array using Cycle sort
void cycleSort(int arr[], int n) 
{ 
    int writes = 0; 
    for (int cycle_start = 0; cycle_start <= n - 2; cycle_start++) { 
        int item = arr[cycle_start]; 
        int pos = cycle_start; 
        for (int i = cycle_start + 1; i < n; i++) 
            if (arr[i] < item) 
                pos++; 
        if (pos == cycle_start) 
            continue; 
        while (item == arr[pos]) 
            pos += 1; 
        if (pos != cycle_start) { 
            swap(item, arr[pos]); 
            writes++; 
        } 
        while (pos != cycle_start) { 
            pos = cycle_start; 
            for (int i = cycle_start + 1; i < n; i++) 
                if (arr[i] < item) 
                    pos += 1; 
            while (item == arr[pos]) 
                pos += 1; 
            if (item != arr[pos]) { 
                swap(item, arr[pos]); 
                writes++; 
            } 
        } 
    } 
}
void cycleSort ( int arr [ ] , int n ) { int writes = 0 ; for ( int cycle_start = 0 ; cycle_start <= n - 2 ; cycle_start ++ ) { int item = arr [ cycle_start ] ; int pos = cycle_start ; for ( int i = cycle_start + 1 ; i < n ; i ++ ) if ( arr [ i ] < item ) pos ++ ; if ( pos == cycle_start ) continue ; while ( item == arr [ pos ] ) pos += 1 ; if ( pos != cycle_start ) { swap ( item , arr [ pos ] ) ; writes ++ ; } while ( pos != cycle_start ) { pos = cycle_start ; for ( int i = cycle_start + 1 ; i < n ; i ++ ) if ( arr [ i ] < item ) pos += 1 ; while ( item == arr [ pos ] ) pos += 1 ; if ( item != arr [ pos ] ) { swap ( item , arr [ pos ] ) ; writes ++ ; } } } }
Function sort the array using Cycle sort
Function sort the array using Cycle sort
// count number of memory writes  // traverse array elements and put it to on  // the right place  // initialize item as starting point  // Find position where we put the item. We basically  // count all smaller elements on right side of item.  // If item is already in correct position  // ignore all duplicate  elements  // put the item to it's right position  // Rotate rest of the cycle  // Find position where we put the element  // ignore all duplicate  elements  // put the item to it's right position  // Number of memory writes or swaps  // cout << writes << endl ; 