diff --git a/python/11_sorts/sorts.py b/python/11_sorts/sorts.py index 127a647..aed133e 100644 --- a/python/11_sorts/sorts.py +++ b/python/11_sorts/sorts.py @@ -7,94 +7,99 @@ from typing import List + # 冒泡排序 def bubble_sort(a: List[int]): - if len(a) <= 1: return - -<<<<<<< HEAD - made_swap = False - for i in range(len(a)): -======= - for i in range(len(a)): + length = len(a) + if length <= 1: + return + + for i in range(length): made_swap = False ->>>>>>> upstream/master - for j in range(len(a) - i - 1): - if a[j] > a[j+1]: - a[j], a[j+1] = a[j+1], a[j] + for j in range(length - i - 1): + if a[j] > a[j + 1]: + a[j], a[j + 1] = a[j + 1], a[j] made_swap = True - if not made_swap: break + if not made_swap: + break + # 插入排序 def insertion_sort(a: List[int]): - if len(a) <= 1: return - - for i in range(1, len(a)): + length = len(a) + if length <= 1: + return + + for i in range(1, length): value = a[i] j = i - 1 while j >= 0 and a[j] > value: - a[j+1] = a[j] + a[j + 1] = a[j] j -= 1 - a[j+1] = value + a[j + 1] = value + # 选择排序 def selection_sort(a: List[int]): - if len(a) <= 1: return - - for i in range(len(a)): + length = len(a) + if length <= 1: + return + + for i in range(length): min_index = i min_val = a[i] - for j in range(i, len(a)): + for j in range(i, length): if a[j] < min_val: min_val = a[j] min_index = j a[i], a[min_index] = a[min_index], a[i] +def test_bubble_sort(): + test_array = [1, 1, 1, 1] + bubble_sort(test_array) + assert test_array == [1, 1, 1, 1] + test_array = [4, 1, 2, 3] + bubble_sort(test_array) + assert test_array == [1, 2, 3, 4] + test_array = [4, 3, 2, 1] + bubble_sort(test_array) + assert test_array == [1, 2, 3, 4] + + +def test_insertion_sort(): + test_array = [1, 1, 1, 1] + insertion_sort(test_array) + assert test_array == [1, 1, 1, 1] + test_array = [4, 1, 2, 3] + insertion_sort(test_array) + assert test_array == [1, 2, 3, 4] + test_array = [4, 3, 2, 1] + insertion_sort(test_array) + assert test_array == [1, 2, 3, 4] + + +def test_selection_sort(): + test_array = [1, 1, 1, 1] + selection_sort(test_array) + assert test_array == [1, 1, 1, 1] + test_array = [4, 1, 2, 3] + selection_sort(test_array) + assert test_array == [1, 2, 3, 4] + test_array = [4, 3, 2, 1] + selection_sort(test_array) + assert test_array == [1, 2, 3, 4] + + if __name__ == "__main__": - array = [1, 1, 1, 1] - bubble_sort(array) - print(array) - - array = [1, 2, 3, 4] - bubble_sort(array) - print(array) - - array = [4, 3, 2, 1] - bubble_sort(array) - print(array) - array = [5, 6, -1, 4, 2, 8, 10, 7, 6] bubble_sort(array) print(array) - array = [1, 1, 1, 1] - insertion_sort(array) - print(array) - - array = [1, 2, 3, 4] - insertion_sort(array) - print(array) - - array = [4, 3, 2, 1] - insertion_sort(array) - print(array) - array = [5, 6, -1, 4, 2, 8, 10, 7, 6] insertion_sort(array) print(array) - array = [1, 1, 1, 1] - selection_sort(array) - print(array) - - array = [1, 2, 3, 4] - selection_sort(array) - print(array) - - array = [4, 3, 2, 1] - selection_sort(array) - print(array) - array = [5, 6, -1, 4, 2, 8, 10, 7, 6] selection_sort(array) - print(array) \ No newline at end of file + print(array)