归并排序动图展示:
def merge_sort(alist):
'''归并排序'''
n=len(alist)
#列表长度 n
if n<=1:
#如果长度小于等于1,直接返回列表
return alist
mid = n//2
#将列表折半,分成两个列表
left_li = merge_sort(alist[:mid])
right_li = merge_sort(alist[mid:])
left_pointer,right_pointer = 0,0
#定义两个列表的游标
result=[]
#new一个新列表,对新列表进行追加
while left_pointer<len(left_li) and right_pointer<len(right_li):
#控制条件:左列表游标小于左列表长度,并且右列表游标小于右列表长度
if left_li[left_pointer]<right_li[right_pointer]:
#如果左列表游标指向的值小于右列表游标指向的值
result.append(left_li[left_pointer])
#将左列表游标指向的值追加给新列表
left_pointer+=1
#左列表游标向后移动一位
else:
#如果右列表游标指向的值小于左列表游标指向的值
result.append(right_li[right_pointer])
#将右列表游标指向的值追加给新列表
right_pointer+=1
#右列表游标向后移动一位
result += left_li[left_pointer:]
#如果循环结束,左列表还有没对比的值,直接追加给新列表
result += right_li[right_pointer:]
#如果循环结束,右列表还有没对比的值,直接追加给新列表
return result
#返回一个排序完成的新列表