# 快速排序 def quick_sort(arr: list): """ 快速排序,最快O(nlogn), 最坏O(n^2) """ if len(arr) < 2: return arr else: privot = arr[0] less = [i for i in arr[1:] if i <= privot] # 所有小于基准值的元素组成的数组 greater = [i for i in arr[1:] if i > privot] # 所有大于基准值得元素组成的数组 return quick_sort(less) + [privot] + quick_sort(greater) # 分别递归调用并拼接结果
-------------------------------------------------------------------------------------------------------------------------------------------
# 归并排序
def MergerSort(lists): if len(lists) <= 1: return lists num = len(lists) // 2 # 将列表分成更小的两个列表 # 分别对左右两个列表进行处理,分别返回两个排序好的列表 left = MergerSort(lists[:num]) right = MergerSort(lists[num:]) # 对排序好的两个列表合并,产生一个新的排序好的列表 return Merge(left, right) def Merge(left, right): r, l = 0, 0 result = [] while l < len(left) and r < len(right): if left[l] <= right[r]: result.append(left[l]) l += 1 else: result.append(right[r]) r += 1 result += list(left[l:]) result += list(right[r:]) return result