mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-01-18 16:27:02 +00:00
Create cyclesort.py
implementation of cycle sort in python3
This commit is contained in:
parent
ad935df161
commit
8c5fd4b597
51
sorts/cyclesort.py
Normal file
51
sorts/cyclesort.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
# Code contributed by Honey Sharma
|
||||
def cycle_sort(array):
|
||||
ans = 0
|
||||
|
||||
# Pass through the array to find cycles to rotate.
|
||||
for cycleStart in range(0, len(array) - 1):
|
||||
item = array[cycleStart]
|
||||
|
||||
# finding the position for putting the item.
|
||||
pos = cycleStart
|
||||
for i in range(cycleStart + 1, len(array)):
|
||||
if array[i] < item:
|
||||
pos += 1
|
||||
|
||||
# If the item is already present-not a cycle.
|
||||
if pos == cycleStart:
|
||||
continue
|
||||
|
||||
# Otherwise, put the item there or right after any duplicates.
|
||||
while item == array[pos]:
|
||||
pos += 1
|
||||
array[pos], item = item, array[pos]
|
||||
ans += 1
|
||||
|
||||
# Rotate the rest of the cycle.
|
||||
while pos != cycleStart:
|
||||
|
||||
# Find where to put the item.
|
||||
pos = cycleStart
|
||||
for i in range(cycleStart + 1, len(array)):
|
||||
if array[i] < item:
|
||||
pos += 1
|
||||
|
||||
# Put the item there or right after any duplicates.
|
||||
while item == array[pos]:
|
||||
pos += 1
|
||||
array[pos], item = item, array[pos]
|
||||
ans += 1
|
||||
|
||||
return ans
|
||||
|
||||
|
||||
# Main Code starts here
|
||||
user_input = input('Enter numbers separated by a comma:\n')
|
||||
unsorted = [int(item) for item in user_input.split(',')]
|
||||
n = len(unsorted)
|
||||
cycle_sort(unsorted)
|
||||
|
||||
print("After sort : ")
|
||||
for i in range(0, n):
|
||||
print(unsorted[i], end=' ')
|
Loading…
Reference in New Issue
Block a user