From 8c5fd4b597e7903a18040eff5c7e86aef4b0b030 Mon Sep 17 00:00:00 2001 From: Honey Sharma Date: Fri, 27 Oct 2017 21:00:08 +0530 Subject: [PATCH] Create cyclesort.py implementation of cycle sort in python3 --- sorts/cyclesort.py | 51 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 sorts/cyclesort.py diff --git a/sorts/cyclesort.py b/sorts/cyclesort.py new file mode 100644 index 000000000..2cc635417 --- /dev/null +++ b/sorts/cyclesort.py @@ -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=' ')