采用分治思想,再而两两排序合并
def merge_sort(alist):
"""归并排序"""
n = len(alist)
if n<= 1:
return alist
mid = n // 2
# left 采用归并排序后形成的有序的新的列表
left_list = merge_sort(alist[:mid])
# right 采用归并排序后形成的有序的新的列表
right_list = merge_sort(alist[mid:])
# 合并新的列表 left_pointer right_pointer
left_pointer,right_pointer = 0,0
# 新列表,放入排序数据
result = []
# 合并数据
while left_pointer < len(left_list) and right_pointer < len(right_list):
if left_list[left_pointer] > right_list[right_pointer]:
result.append(right_list[right_pointer])
right_pointer+=1
else:
result.append(left_list[left_pointer])
left_pointer += 1
result+=left_list[left_pointer:]
result+=right_list[right_pointer:]
return result
if __name__ == "__main__":
list = [100,20,30,1,2,4,10,15,20,4]
new_list = merge_sort(list)
print(list)
print(new_list)