From e359b6efd411aa21ed63e588386abe5fc38ff666 Mon Sep 17 00:00:00 2001 From: JakeBonek Date: Tue, 16 Aug 2016 12:43:02 -0400 Subject: [PATCH] Fixed typos and added the shell sort algorithm --- sorts/bogosort.py | 4 +-- sorts/bubble_sort.py | 2 +- sorts/heap_sort.py | 27 ++++++++++++++++++- sorts/insertion_sort.py | 6 ++--- sorts/merge_sort.py | 6 ++--- sorts/quick_sort.py | 4 +-- sorts/selection_sort.py | 15 ++++++----- sorts/shell_sort.py | 58 +++++++++++++++++++++++++++++++++++++++++ 8 files changed, 103 insertions(+), 19 deletions(-) create mode 100644 sorts/shell_sort.py diff --git a/sorts/bogosort.py b/sorts/bogosort.py index 7e9d07f50..5abdab87d 100644 --- a/sorts/bogosort.py +++ b/sorts/bogosort.py @@ -1,5 +1,5 @@ """ -This is pure python implementation of bogosort algorithm +This is pure python implementation of the bogosort algorithm For doctests run following command: python -m doctest -v bogosort.py or @@ -47,6 +47,6 @@ if __name__ == '__main__': else: input_function = input - user_input = input_function('Enter numbers separated by coma:\n') + user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] print(bogosort(unsorted)) diff --git a/sorts/bubble_sort.py b/sorts/bubble_sort.py index 2baaff9ae..3bacb306f 100644 --- a/sorts/bubble_sort.py +++ b/sorts/bubble_sort.py @@ -47,6 +47,6 @@ if __name__ == '__main__': else: input_function = input - user_input = input_function('Enter numbers separated by coma:\n') + user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] print(bubble_sort(unsorted)) diff --git a/sorts/heap_sort.py b/sorts/heap_sort.py index 5d1cbbbd0..4c6026b8b 100644 --- a/sorts/heap_sort.py +++ b/sorts/heap_sort.py @@ -1,4 +1,14 @@ +""" +This is a pure python implementation of the heap sort algorithm. +For doctests run following command: +python -m doctest -v insertion_sort.py +or +python3 -m doctest -v insertion_sort.py + +For manual testing run: +python insertion_sort.py +""" from __future__ import print_function @@ -17,6 +27,21 @@ def heapify(unsorted,index,heap_size): heapify(unsorted,largest,heap_size) def heap_sort(unsorted): + """Pure implementation of the heap sort algorithm in Python + :param collection: some mutable ordered collection with heterogeneous + comparable items inside + :return: the same collection ordered by ascending + + Examples: + >>> heap_sort([0, 5, 3, 2, 2]) + [0, 2, 2, 3, 5] + + >>> heap_sort([]) + [] + + >>> heap_sort([-2, -5, -45]) + [-45, -5, -2] + """ n=len(unsorted) for i in range (n/2 - 1 , -1, -1) : heapify(unsorted,i,n) @@ -33,7 +58,7 @@ if __name__ == '__main__': else: input_function = input - user_input = input_function('Enter numbers separated by coma:\n') + user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] print (heap_sort(unsorted)) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index 501655e92..646ed68ca 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -1,5 +1,5 @@ """ -This is pure python implementation of insertion sort algorithm +This is a pure python implementation of the insertion sort algorithm For doctests run following command: python -m doctest -v insertion_sort.py @@ -13,7 +13,7 @@ from __future__ import print_function def insertion_sort(collection): - """Pure implementation of insertion sort algorithm in Python + """Pure implementation of the insertion sort algorithm in Python :param collection: some mutable ordered collection with heterogeneous comparable items inside @@ -51,6 +51,6 @@ if __name__ == '__main__': else: input_function = input - user_input = input_function('Enter numbers separated by coma:\n') + user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] print(insertion_sort(unsorted)) diff --git a/sorts/merge_sort.py b/sorts/merge_sort.py index c34c395af..92a678016 100644 --- a/sorts/merge_sort.py +++ b/sorts/merge_sort.py @@ -1,5 +1,5 @@ """ -This is pure python implementation of merge sort algorithm +This is a pure python implementation of the merge sort algorithm For doctests run following command: python -m doctest -v merge_sort.py @@ -13,7 +13,7 @@ from __future__ import print_function def merge_sort(collection): - """Pure implementation of merge sort algorithm in Python + """Pure implementation of the merge sort algorithm in Python :param collection: some mutable ordered collection with heterogeneous comparable items inside @@ -71,6 +71,6 @@ if __name__ == '__main__': else: input_function = input - user_input = input_function('Enter numbers separated by coma:\n') + user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] print(merge_sort(unsorted)) diff --git a/sorts/quick_sort.py b/sorts/quick_sort.py index 4e6516cd8..f8e61ede4 100644 --- a/sorts/quick_sort.py +++ b/sorts/quick_sort.py @@ -1,5 +1,5 @@ """ -This is pure python implementation of quick sort algorithm +This is a pure python implementation of the quick sort algorithm For doctests run following command: python -m doctest -v quick_sort.py @@ -62,6 +62,6 @@ if __name__ == '__main__': else: input_function = input - user_input = input_function('Enter numbers separated by coma:\n') + user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] print(sort(unsorted)) diff --git a/sorts/selection_sort.py b/sorts/selection_sort.py index fbb94226d..80c306226 100644 --- a/sorts/selection_sort.py +++ b/sorts/selection_sort.py @@ -1,5 +1,5 @@ """ -This is pure python implementation of selection sort algorithm +This is a pure python implementation of the selection sort algorithm For doctests run following command: python -m doctest -v selection_sort.py @@ -13,7 +13,11 @@ from __future__ import print_function def selection_sort(collection): - """Pure implementation of selection sort algorithm in Python + """Pure implementation of the selection sort algorithm in Python + :param collection: some mutable ordered collection with heterogeneous + comparable items inside + :return: the same collection ordered by ascending + Examples: >>> selection_sort([0, 5, 3, 2, 2]) @@ -24,11 +28,8 @@ def selection_sort(collection): >>> selection_sort([-2, -5, -45]) [-45, -5, -2] - - :param collection: some mutable ordered collection with heterogeneous - comparable items inside - :return: the same collection ordered by ascending """ + length = len(collection) for i in range(length): least = i @@ -50,6 +51,6 @@ if __name__ == '__main__': else: input_function = input - user_input = input_function('Enter numbers separated by coma:\n') + user_input = input_function('Enter numbers separated by a comma:\n') unsorted = [int(item) for item in user_input.split(',')] print(selection_sort(unsorted)) diff --git a/sorts/shell_sort.py b/sorts/shell_sort.py new file mode 100644 index 000000000..4dc37240b --- /dev/null +++ b/sorts/shell_sort.py @@ -0,0 +1,58 @@ +""" +This is a pure python implementation of the shell sort algorithm + +For doctests run following command: +python -m doctest -v shell_sort.py +or +python3 -m doctest -v shell_sort.py + +For manual testing run: +python shell_sort.py +""" +from __future__ import print_function + + +def shell_sort(collection): + """Pure implementation of shell sort algorithm in Python + :param collection: Some mutable ordered collection with heterogeneous + comparable items inside + :return: the same collection ordered by ascending + + >>> shell_sort([0, 5, 3, 2, 2)] + [0, 2, 2, 3, 5] + + >>> shell_sort([]) + [] + + >>> shell_sort([-2, -5, -45]) + [-45, -5, -2] + """ + # Marcin Ciura's gap sequence + gaps = [701, 301, 132, 57, 23, 10, 4, 1] + + for gap in gaps: + i = gap + while i < len(collection): + temp = collection[i] + j = i + while j >= gap and collection[j-gap] > temp: + collection[j] = collection[j - gap] + j -= gap + collection[j] = temp + i += 1 + + + return collection + +if __name__ == '__main__': + import sys + # For python 2.x and 3.x compatibility: 3.x has not raw_input builtin + # otherwise 2.x's input builtin function is too "smart" + if sys.version_info.major < 3: + input_function = raw_input + else: + input_function = input + + user_input = input_function('Enter numbers separated by a comma:\n') + unsorted = [int(item) for item in user_input.split(',')] + print(shell_sort(unsorted))