diff --git a/sorts/pigeon_sort.py b/sorts/pigeon_sort.py new file mode 100644 index 000000000000..65eb8896ea9c --- /dev/null +++ b/sorts/pigeon_sort.py @@ -0,0 +1,50 @@ +''' + This is an implementation of Pigeon Hole Sort. +''' + +from __future__ import print_function + +def pigeon_sort(array): + # Manually finds the minimum and maximum of the array. + min = array[0] + max = array[0] + + for i in range(len(array)): + if(array[i] < min): min = array[i] + elif(array[i] > max): max = array[i] + + # Compute the variables + holes_range = max-min + 1 + holes = [0 for _ in range(holes_range)] + holes_repeat = [0 for _ in range(holes_range)] + + # Make the sorting. + for i in range(len(array)): + index = array[i] - min + if(holes[index] != array[i]): + holes[index] = array[i] + holes_repeat[index] += 1 + else: holes_repeat[index] += 1 + + # Makes the array back by replacing the numbers. + index = 0 + for i in range(holes_range): + while(holes_repeat[i] > 0): + array[index] = holes[i] + index += 1 + holes_repeat[i] -= 1 + + # Returns the sorted array. + return array + +if __name__ == '__main__': + try: + raw_input # Python2 + except NameError: + raw_input = input # Python 3 + + user_input = raw_input('Enter numbers separated by comma:\n') + unsorted = [int(x) for x in user_input.split(',')] + sorted = pigeon_sort(unsorted) + + print(sorted)