归并排序
归并排序是递归算法,思路是将数据表持续分裂为两半,对两半分别进行归并排序
递归的基本结束条件:数据表仅有一项,自然是排好序的
缩小规模:将数据表分裂为相等的两半,规模减为原来的二分之一
调用自身:将两半分别调用自身排序,然后将分别排好序的两半进行归并,得到排好序的数据表
代码
def mergeSort(alist):
if len(alist)>1:
mid=len(alist)//2
lefthalf=alist[:mid]
righthalf=alist[mid:]
mergeSort(lefthalf)
mergeSort(righthalf)
i=j=k=0
while i <len(lefthalf) and j<len(righthalf):
if lefthalf[i]<righthalf[j]:
alist[k]=lefthalf[i]
i+=1
else:
alist[k]=righthalf[j]
j+=1
k=k+1
while i<len(lefthalf):
alist[k]=lefthalf[i]
i+=1
k+=1
while j<len(righthalf):
alist[k]=righthalf[j]
j+=1
k+=1
alist=[52,312,54,7,3,2,56,34,65,82,91,65]
mergeSort(alist)
print(alist)
最简便写法(体现了Python的强大)
def mergeSort(alist):
if len(alist)<=1:
return alist
middle=int(len(alist)/2)
left=mergeSort(alist[:middle])
right=mergeSort(alist[middle:])
merged=[]
while left and right:
merged.append(left.pop(0) if left[0]<right[0] else right.pop(0))
merged.extend(right if right else left)
return merged
alist=[52,312,54,7,3,2,56,34,65,82,91,65]
b=mergeSort(alist)
print(b)