public class CycleSort {
public static void main(String[] args) {
int arr[] = {1,12,9,14,16,80,33,3,4,7,60,2};
System.out.println("printing an input array ::");
printArray(arr);
cycleSort(arr,arr.length);
System.out.println("printing an sorted array ::");
printArray(arr);
}
static void printArray(int arr[])
{
int n = arr.length;
for (int i = 0; i < n; ++i)
System.out.print(arr[i] + " ");
System.out.println();
}
static void cycleSort(int arr[], int size){
int writes = 0;
for(int cycle_sort=0;cycle_sort<size;cycle_sort++){
int item = arr[cycle_sort];
System.out.println("item ::"+item+", cycle_sort::"+cycle_sort);
int pos = cycle_sort;
for(int i = cycle_sort+1;i<size;i++){
if(arr[i]<item)
pos++;
}
if(pos==cycle_sort)
continue;
while(item==arr[pos])
pos++;
if(pos!=cycle_sort){
int temp = item;
item = arr[pos];
arr[pos] = temp;
writes++;
}
while(pos!=cycle_sort){
System.out.println("item ::"+item+", cycle_sort::"+cycle_sort);
pos = cycle_sort;
for(int i=cycle_sort+1;i<size;i++){
if(arr[i]<item)
pos++;
}
while(item==arr[pos])
pos++;
if(item!=arr[pos]){
int temp = item;
item = arr[pos];
arr[pos]=temp;
writes++;
}
System.out.println("cycle_sort ::"+cycle_sort+", pos::"+pos);
printArray(arr);
}
System.out.println("cycle_sort ::"+cycle_sort);
printArray(arr);
}
System.out.println("writes ::"+writes);
}
}
Output :
printing an input array :: 1 12 9 14 16 80 33 3 4 7 60 2 item ::1, cycle_sort::0 item ::12, cycle_sort::1 item ::33, cycle_sort::1 cycle_sort ::1, pos::9 1 12 9 14 16 80 12 3 4 33 60 2 item ::7, cycle_sort::1 cycle_sort ::1, pos::4 1 12 9 14 7 80 12 3 4 33 60 2 item ::16, cycle_sort::1 cycle_sort ::1, pos::8 1 12 9 14 7 80 12 3 16 33 60 2 item ::4, cycle_sort::1 cycle_sort ::1, pos::3 1 12 9 4 7 80 12 3 16 33 60 2 item ::14, cycle_sort::1 cycle_sort ::1, pos::7 1 12 9 4 7 80 12 14 16 33 60 2 item ::3, cycle_sort::1 cycle_sort ::1, pos::2 1 12 3 4 7 80 12 14 16 33 60 2 item ::9, cycle_sort::1 cycle_sort ::1, pos::5 1 12 3 4 7 9 12 14 16 33 60 2 item ::80, cycle_sort::1 cycle_sort ::1, pos::11 1 12 3 4 7 9 12 14 16 33 60 80 item ::2, cycle_sort::1 cycle_sort ::1, pos::1 1 2 3 4 7 9 12 14 16 33 60 80 cycle_sort ::1 1 2 3 4 7 9 12 14 16 33 60 80 item ::3, cycle_sort::2 item ::4, cycle_sort::3 item ::7, cycle_sort::4 item ::9, cycle_sort::5 item ::12, cycle_sort::6 item ::14, cycle_sort::7 item ::16, cycle_sort::8 item ::33, cycle_sort::9 item ::60, cycle_sort::10 item ::80, cycle_sort::11 writes ::10 printing an sorted array :: 1 2 3 4 7 9 12 14 16 33 60 80