From 1e13cd40da60987d2a367a8121ef68245ef63584 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sun, 27 Sep 2020 03:14:59 +0800 Subject: [PATCH 1/4] delete duplicate file update insert sort --- sorts/i_sort.py | 21 -------------------- sorts/insertion_sort.py | 44 ++++++++++++++++++++++++----------------- 2 files changed, 26 insertions(+), 39 deletions(-) delete mode 100644 sorts/i_sort.py diff --git a/sorts/i_sort.py b/sorts/i_sort.py deleted file mode 100644 index f6100a8d0819..000000000000 --- a/sorts/i_sort.py +++ /dev/null @@ -1,21 +0,0 @@ -def insertionSort(arr): - """ - >>> a = arr[:] - >>> insertionSort(a) - >>> a == sorted(a) - True - """ - for i in range(1, len(arr)): - key = arr[i] - j = i - 1 - while j >= 0 and key < arr[j]: - arr[j + 1] = arr[j] - j -= 1 - arr[j + 1] = key - - -arr = [12, 11, 13, 5, 6] -insertionSort(arr) -print("Sorted array is:") -for i in range(len(arr)): - print("%d" % arr[i]) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index 28458ad1b86d..49a3c21b2b51 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -24,30 +24,38 @@ def insertion_sort(collection: list) -> list: Examples: >>> insertion_sort([0, 5, 3, 2, 2]) [0, 2, 2, 3, 5] - - >>> insertion_sort([]) - [] - - >>> insertion_sort([-2, -5, -45]) - [-45, -5, -2] + >>> insertion_sort([]) == sorted([]) + True + >>> insertion_sort([-2, -5, -45]) == sorted([-2, -5, -45]) + True + >>> insertion_sort(['d', 'a', 'b', 'e', 'c']) == sorted(['d', 'a', 'b', 'e', 'c']) + True + >>> import random + >>> collection = random.sample(range(-50, 50), 100) + >>> insertion_sort(collection) == sorted(collection) + True + >>> import string + >>> collection = random.choices(string.ascii_letters + string.digits, k=100) + >>> insertion_sort(collection) == sorted(collection) + True """ - for loop_index in range(1, len(collection)): - insertion_index = loop_index - while ( - insertion_index > 0 - and collection[insertion_index - 1] > collection[insertion_index] - ): - collection[insertion_index], collection[insertion_index - 1] = ( - collection[insertion_index - 1], - collection[insertion_index], - ) - insertion_index -= 1 - + for i in range(1, len(collection)): + j = i - 1 + key = collection[i] + while j >= 0 and key < collection[j]: + collection[j + 1] = collection[j] + j -= 1 + if j != i - 1: + collection[j + 1] = key 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(f"{insertion_sort(unsorted) = }") From a7833f2d4d301ef0398cc5aea99bbed361dae2ed Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 3 Oct 2020 16:58:44 +0800 Subject: [PATCH 2/4] rename --- sorts/insertion_sort.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index 49a3c21b2b51..a0d2b3fc54d7 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -41,13 +41,13 @@ def insertion_sort(collection: list) -> list: """ for i in range(1, len(collection)): - j = i - 1 - key = collection[i] - while j >= 0 and key < collection[j]: - collection[j + 1] = collection[j] - j -= 1 - if j != i - 1: - collection[j + 1] = key + insert_index = i - 1 + insert_value = collection[i] + while insert_index >= 0 and insert_value < collection[insert_index]: + collection[insert_index + 1] = collection[insert_index] + insert_index -= 1 + if insert_index != i - 1: + collection[insert_index + 1] = insert_value return collection @@ -58,4 +58,4 @@ def insertion_sort(collection: list) -> list: user_input = input("Enter numbers separated by a comma:\n").strip() unsorted = [int(item) for item in user_input.split(",")] - print(f"{insertion_sort(unsorted) = }") + print(f"{insertion_sort(unsorted) = }") \ No newline at end of file From bb4952e5c92a35ef41e215207a9934c36c3516c1 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 3 Oct 2020 17:12:36 +0800 Subject: [PATCH 3/4] fixed error --- sorts/insertion_sort.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index a0d2b3fc54d7..b353c940044c 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -58,4 +58,4 @@ def insertion_sort(collection: list) -> list: user_input = input("Enter numbers separated by a comma:\n").strip() unsorted = [int(item) for item in user_input.split(",")] - print(f"{insertion_sort(unsorted) = }") \ No newline at end of file + print(f"{insertion_sort(unsorted) = }") From e2f56a95aaee2238fa58ce3b7c251876a06ab560 Mon Sep 17 00:00:00 2001 From: shellhub Date: Sat, 3 Oct 2020 21:11:53 +0800 Subject: [PATCH 4/4] using enumerate() --- sorts/insertion_sort.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sorts/insertion_sort.py b/sorts/insertion_sort.py index b353c940044c..6d5bb2b46013 100644 --- a/sorts/insertion_sort.py +++ b/sorts/insertion_sort.py @@ -40,13 +40,12 @@ def insertion_sort(collection: list) -> list: True """ - for i in range(1, len(collection)): - insert_index = i - 1 - insert_value = collection[i] + for insert_index, insert_value in enumerate(collection[1:]): + temp_index = insert_index while insert_index >= 0 and insert_value < collection[insert_index]: collection[insert_index + 1] = collection[insert_index] insert_index -= 1 - if insert_index != i - 1: + if insert_index != temp_index: collection[insert_index + 1] = insert_value return collection