归并排序
归并排序是分治方法的一个经典运用,通过把一个大数组从中间递归的分割成两半,再把小的数组通过比较数组内部的元素组合成有序数组, 不断迭代这个过程最终实现整个数组的排序。
def merge(a,b):
c=[]
h=j=0
while j<len(a) and h<len(b):
if a[j]<b[h]:
c.append(a[j])
j+=1
else:
c.append(b[h])
h += 1
if j==len(a): # 如果a数组遍历完则把b数组剩下的值都加入结果(a,b已排序)
for i in b[h:]:
c.append(i)
if h==len(b):
for i in a[j:]:
c.append(i)
def sort(arr):
if len(arr)<=1:
return arr
mid = len(arr)//2
left = sort(arr[:mid])
right = sort(arr[mid:])
return merge(left,right)
test
l = [1, 3, 2, 9, 5]
sort(l)
[1, 2, 3, 5, 9]