From 6c32a6d2d35a2467577193adcd12e93e65829b93 Mon Sep 17 00:00:00 2001 From: shellhub Date: Wed, 16 Dec 2020 18:45:33 +0800 Subject: [PATCH 1/3] fixed shell sort --- sorts/shell_sort.py | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/sorts/shell_sort.py b/sorts/shell_sort.py index bf3c2c7f9cc6..2940f16429ca 100644 --- a/sorts/shell_sort.py +++ b/sorts/shell_sort.py @@ -19,26 +19,28 @@ def shell_sort(collection): >>> 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: for i in range(gap, len(collection)): - j = i - while j >= gap and collection[j] < collection[j - gap]: - collection[j], collection[j - gap] = collection[j - gap], collection[j] + insert_value = collection[i] + j = i - gap + while j >= 0 and insert_value < collection[j]: + collection[j + gap] = collection[j] j -= gap + collection[j + gap] = insert_value return collection if __name__ == "__main__": + from doctest import testmod + + testmod() user_input = input("Enter numbers separated by a comma:\n").strip() unsorted = [int(item) for item in user_input.split(",")] print(shell_sort(unsorted)) From b020f35b3c076c55e27005524b12dff1b5a78d1a Mon Sep 17 00:00:00 2001 From: shellhub Date: Thu, 17 Dec 2020 15:50:35 +0800 Subject: [PATCH 2/3] udpate code style --- sorts/shell_sort.py | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/sorts/shell_sort.py b/sorts/shell_sort.py index 2940f16429ca..fca5d3a76879 100644 --- a/sorts/shell_sort.py +++ b/sorts/shell_sort.py @@ -1,13 +1,5 @@ """ -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 +https://en.wikipedia.org/wiki/Shellsort#Pseudocode """ @@ -25,15 +17,16 @@ def shell_sort(collection): [-45, -5, -2] """ # Marcin Ciura's gap sequence + gaps = [701, 301, 132, 57, 23, 10, 4, 1] for gap in gaps: for i in range(gap, len(collection)): insert_value = collection[i] - j = i - gap - while j >= 0 and insert_value < collection[j]: - collection[j + gap] = collection[j] + j = i + while j >= gap and insert_value < collection[j - gap]: + collection[j] = collection[j - gap] j -= gap - collection[j + gap] = insert_value + collection[j] = insert_value return collection From cf44cf3b405de53eec4a5f5033abb48b31c37220 Mon Sep 17 00:00:00 2001 From: Du Yuanchao Date: Fri, 18 Dec 2020 08:56:46 +0800 Subject: [PATCH 3/3] Update sorts/shell_sort.py Co-authored-by: John Law --- sorts/shell_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorts/shell_sort.py b/sorts/shell_sort.py index fca5d3a76879..2e749e43d056 100644 --- a/sorts/shell_sort.py +++ b/sorts/shell_sort.py @@ -23,7 +23,7 @@ def shell_sort(collection): for i in range(gap, len(collection)): insert_value = collection[i] j = i - while j >= gap and insert_value < collection[j - gap]: + while j >= gap and collection[j - gap] > insert_value: collection[j] = collection[j - gap] j -= gap collection[j] = insert_value