Python Program for Cycle Sort
Last Updated :
28 Aug, 2023
Cycle sort is an in-place sorting Algorithm, unstable sorting algorithm, a comparison sort that is theoretically optimal in terms of the total number of writes to the original array.
- It is optimal in terms of number of memory writes. It minimizes the number of memory writes to sort (Each value is either written zero times, if it’s already in its correct position, or written one time to its correct position.)
- It is based on the idea that array to be sorted can be divided into cycles. Cycles can be visualized as a graph. We have n nodes and an edge directed from node i to node j if the element at i-th index must be present at j-th index in the sorted array. Cycle in arr[] = {4, 5, 2, 1, 5} Cycle in arr[] = {4, 3, 2, 1}
We one by one consider all cycles. We first consider the cycle that includes first element. We find correct position of first element, place it at its correct position, say j. We consider old value of arr[j] and find its correct position, we keep doing this till all elements of current cycle are placed at correct position, i.e., we don\’t come back to cycle starting point.
Python3
def cycleSort(array):
writes = 0
for cycleStart in range ( 0 , len (array) - 1 ):
item = array[cycleStart]
pos = cycleStart
for i in range (cycleStart + 1 , len (array)):
if array[i] < item:
pos + = 1
if pos = = cycleStart:
continue
while item = = array[pos]:
pos + = 1
array[pos], item = item, array[pos]
writes + = 1
while pos ! = cycleStart:
pos = cycleStart
for i in range (cycleStart + 1 , len (array)):
if array[i] < item:
pos + = 1
while item = = array[pos]:
pos + = 1
array[pos], item = item, array[pos]
writes + = 1
return writes
arr = [ 1 , 8 , 3 , 9 , 10 , 10 , 2 , 4 ]
n = len (arr)
cycleSort(arr)
print ( "After sort : " )
for i in range ( 0 , n) :
print (arr[i], end = \ ' \' )
|
Output:
After sort :
1 2 3 4 8 9 10 10
Time Complexity: O(n2)
Auxiliary Space: O(1)
Please refer complete article on Cycle Sort for more details!
Please Login to comment...