def cycleSort(array):
writes = 0
# [ 26, 68, 79, 42, 48 ]
for cycleStart in range(0, len(array) - 1):
# [ 26, 42, 48, 68, 79 ]
# cycleStart = 3
# item = 79
# pos = 0
item = array[cycleStart]
pos = cycleStart # pos = 2 + 2 = 4
for i in range(cycleStart + 1, len(array)): # i = 4 -> 5
if array[i] < item:
pos += 1
if pos == cycleStart:
continue
# duplicates
while item == array[pos]:
pos += 1
# swapping
array[pos], item = item, array[pos]
writes += 1
# [ 26, 42, 48, 68, 79 ]
# cycleStart = 2
# item = 79
# pos = 2
while pos != cycleStart:
pos = cycleStart
for i in range(cycleStart + 1, len(array)): # i = 3 -> 5
if array[i] < item:
pos += 1
while item == array[pos]:
pos += 1
array[pos], item = item, array[pos]
writes += 1
return array, writes
print(cycleSort( [ 26, 68, 79, 42, 48 ] ) [0])