# 归并排序
def merge_sort(list):
n = len(list)
# 先将待排序的数拆开
if n <= 1: # 拆分到只有一个元素为止,返回。
return list
mid = n // 2
# print(list[:mid])
# print(list[mid:])
left_li = merge_sort(list[:mid]) # 归并排序后产生的新有序列表
right_li = merge_sort(list[mid:])
# print(left_li)
# print(right_li)
# 合并left和right,将2个有序的子序列合并为一个新的整体
left_pointer, right_pointer = 0, 0
# 存放合并后的结果值
result = []
while (left_pointer < len(left_li) and right_pointer <len(right_li) ):
if left_li[left_pointer] > right_li[right_pointer]:
result.append(right_li[right_pointer])
right_pointer += 1
else:
result.append(left_li[left_pointer])
left_pointer += 1
if left_pointer < len(left_li):
result += left_li[left_pointer:]
if right_pointer < len(right_li):
result += right_li[right_pointer:]
return result
if __name__ == '__main__':
list = [6, 7, 0, 34, 15, 2, 17]
result = merge_sort(list)
print(result)
来源:https://blog.csdn.net/taylar1357/article/details/100807183