Categories
Algorithm Algorithms & Design Sort

Cycle Sort


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 



Leave a comment

Design a site like this with WordPress.com
Get started