思想:
第一步:将整个列表拆分成左右两部分:
第二步:继续将左区间拆分,直到剩一个元素。
第三步:将左右区间元素比较大小排序后进行合并。
#
def merge_sort(alist):
n = len(alist)
if n <= 1:
return alist
mid = n // 2
# 拆分列表
left_li = merge_sort(alist[:mid])
right_li = merge_sort(alist[mid:])
# 排序合并
left_index,right_index = 0,0
result = []
while left_index < len(left_li) and right_index < len(right_li):
if left_li[left_index] < right_li[right_index]:
result.append(left_li[left_index])
left_index += 1
else:
result.append(right_li[right_index])
right_index += 1
result += left_li[left_index:]
result += right_li[right_index:]
return result
if __name__ == '__main__':
li = [0,4,1,3,6,34,2,2,23,54,6,8,87,6,7,98,67,56,87,34,23,121,54,2312]
merge_sort(li)