常用五種排序方法 氣泡排序、快速排序、插入排序、希爾排序、歸併排序
阿新 • • 發佈:2022-03-24
常見排序時間複雜度和穩定行
氣泡排序、快速排序、插入排序、希爾排序、歸併排序實現
#-*-coding:utf-8-*- import random list1 = [random.randint(1, 20) for i in range(10)] print(list1) # 氣泡排序(交換排序) def maopao_sortt(list1): length = len(list1) for i in range(length): for j in range(i+1, length): if list1[i] > list1[j]: list1[i], list1[j] = list1[j], list1[i] return list1 # maopao_sortt(list1) # print(list1) # 快速排序(交換排序) def quick_sort(list1, i, j): if i>=j: return list1 pivot = list1[i] low, height = i, j while i < j: while i<j and list1[j] >= pivot: j -=1 list1[i] = list1[j] while i<j and list1[i] <= pivot: i +=1 list1[j] = list1[i] list1[j] = pivot quick_sort(list1, low, i-1) quick_sort(list1, i+1, height) return list1 # a = quick_sort(list1, 0, len(list1)-1) # print(a) # 插入排序(插入排序) def insert_sort(list1): for i in range(1, len(list1)): key = list1[i] j = i - 1 while j >= 0 and list1[j] > key: list1[j+1] = list1[j] j -= 1 list1[j+1] = key # insert_sort(list1) # print(list1) # 希爾排序(插入排序) def shell_sort(list1): length = len(list1) dist = length//2 while dist > 0: for i in range(dist, length): key = list1[i] j = i -dist while j >= 0 and list1[j] > key: list1[j + dist] = list1[j] j -= dist list1[j + dist] = key dist //= 2 # shell_sort(list1) # print(list1) # 歸併排序(歸併排序) def merge(left, right): result = [] while left and right: if left[0] < right[0]: result.append(left.pop(0)) else: result.append(right.pop(0)) if left: result += left if right: result += right return result def merge_sort(list1): length = len(list1) if length <= 1: return list1 mid = length // 2 left, right = merge_sort(list1[:mid]), merge_sort(list1[mid:]) a = merge(left, right) return a a = merge_sort(list1) print(a)