defmerge(left, right):"""合并"""
result =[]whilelen(left)>0andlen(right)>0:if left[0]<= right[0]:
result.append(left.pop(0))else:
result.append(right.pop(0))
result += left
result += right
return result
defmerge_sort(arr):iflen(arr)==1:return arr
mid =len(arr)//2
left = arr[:mid]
right = arr[mid:]return merge(merge_sort(left), merge_sort(right))print(merge_sort([1,23,2,4,35,45,6,77]))
快排
defpartition(arr, left, right):
tmp = arr[left]while left < right:while left < right and arr[right]>= tmp:# 从右找比基准值小的数
right -=1
arr[left]= arr[right]# 找到就把右边的值写到左边的位置while left < right and arr[left]<= tmp:# 从左找比基准值大的数
left +=1
arr[right]= arr[left]# 找到就把左边的值写到右边的位置
arr[left]= tmp # 再归位基准值return left
defquick_sort(arr, left, right):if left < right:
mid = partition(arr, left, right)
quick_sort(arr, left, mid-1)
quick_sort(arr, mid+1, right)
arr =[12,3,2,32,54]
n =len(arr)
quick_sort(arr,0, n-1)print(arr)