"""归并排列"""
# 先将一个列表对半分裂成左右两个部分,循环调用自身,直到分裂成单个元素为止
# 判断列表里的元素大小合并成一个有序列表返回
def merge_sort(alist):
"""归并排序"""
# 分解列表
n = len(alist)
if n <= 1:
return alist
mid = n // 2
print(alist[:mid]) # 查看分裂后的左列表
print(alist[mid:]) # 查看分裂后的右列表, 有助于理解
left_li = merge_sort(alist[:mid])
# print(left_li)
right_li = merge_sort(alist[mid:])
# print(right_li)
new_list = []
l = 0
r = 0
while l < len(left_li) and r < len(right_li):
# 循环取出左右列表里的元素,当任一个列表取完后结束
if left_li[l] <= right_li[r]:
# 左右列表合并,小的先放入新的列表
new_list.append(left_li[l])
l += 1
else:
new_list.append(right_li[r])
r += 1
# 将没取完的列表加入new_list
# new_list.extend(left_li[l:])
# new_list.extend(right_li[r:])
# 将列表中剩余的值加入新列表
new_list += left_li[l:]
new_list += right_li[r:]
# print(new_list)
return new_list
if __name__ == '__main__':
li = [7, 3, 5, 6, 3, 59, 2, 34, 252, 52]
list = merge_sort(li)
print(list)
归并排序
最新推荐文章于 2024-09-09 18:34:56 发布