归并排序

原理

把序列递归拆分到极致,然后得出多个有序的小序列,再递归将多个顺序序列合并成一个顺序序列。
image

代码

import random
# 归并函数
# 两段已经有序了的数据
def merge(lst, low, mid, high):
# 左边一段开始
i = low
# 右边一段开始
j = mid + 1
# 临时空间
tmp_lst = []
while i <= mid and j <= high:
# 如果左边的数比较小
if lst[i] < lst[j]:
tmp_lst.append(lst[i])
# 左边有序列表下标往右移动一位
i += 1
else:
tmp_lst.append(lst[j])
# 右边有序列表下标往右移动一位
j += 1
# 如果左边还有数据
while i <= mid:
tmp_lst.append(lst[i])
i += 1
# 如果右边还有数据
while j <= high:
tmp_lst.append(lst[j])
j += 1
# 重新写入数据
lst[low:high + 1] = tmp_lst
# lst = [1, 3, 5, 7, 2, 4, 6, 8]
# n = len(lst)
# merge(lst, 0, 3, 7)
# print(lst)
def merge_sort(lst, low, high):
# 如果存在两个数以上
if low < high:
# 找出中间位置
mid = (low + high) // 2
# 左边、右边一直拆分
merge_sort(lst, low, mid)
merge_sort(lst, mid + 1, high)
# 归并数据
merge(lst, low, mid, high)
lst = [i for i in range(100)]
random.shuffle(lst)
print(lst)
merge_sort(lst, 0, len(lst) - 1)
print(lst)
posted @   gz_xiaohai  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示