归并排序
原理
把序列递归拆分到极致,然后得出多个有序的小序列,再递归将多个顺序序列合并成一个顺序序列。
代码
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)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义