归并排序
1 def merge(li, low,mid, high): 2 i = low 3 j = mid+1 4 ltmp = [] 5 while i<=mid and j <=high: 6 if li[i]<li[j]: 7 ltmp.append(li[i]) 8 i += 1 9 else: 10 ltmp.append(li[j]) 11 j += 1 12 while i<=mid: 13 ltmp.append(li[i]) 14 i += 1 15 while j<=high: 16 ltmp.append(li[j]) 17 j += 1 18 li[low:high+1]=ltmp 19 # li = [1,5,7,8,9,2,5,7,10] 20 # merge(li,0,len(li)//2,len(li)-1) 21 # 本算法时间复杂度为O(n*logn) 22 def merge_sort(li,low,high): 23 if low<high: 24 mid = (low+high)//2 25 merge_sort(li,low,mid) 26 merge_sort(li,mid+1,high) 27 merge(li,low,mid,high) 28 29 30 import time 31 def timer(func): 32 def inner(*args,**kwargs): 33 start = time.time() 34 ret = func(*args,**kwargs) 35 end = time.time() 36 print(end-start) 37 return ret 38 return inner 39 @timer 40 def outer(li,low,high): 41 merge_sort(li,low,high) 42 # import random 43 # li = list(range(1000)) 44 # random.shuffle(li) 45 # print(li) 46 # outer(li,0,len(li)-1) # 1000个数据费时0.004s 47 # print(li) 48 49 # li = list(range(10000)) 50 # random.shuffle(li) 51 # print(li) 52 # outer(li,0,len(li)-1) # 10000个数据费时0.05s 53 # print(li)