归并排序-Python
归并排序的时间复杂度O(nlogn),空间复杂度为O(n)
首先我们先假设有两个有序数组,我们去进行一次归并
用代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | def merge(li: list , start: int , mid: int , end: int ) : res = [] j = mid + 1 while start < = mid and j < = end: if li[start] < li[j]: res.append(li[start]) start + = 1 else : res.append(li[j]) j + = 1 #运行到这一步,说明左右两边一定有一遍已经下标已经超了,即一定有一遍数字已经没了 #然后判断如果是左边还有数字就把左边剩下的数字全部插入列表中,无需在做判断 #判断如果是右边还有数字就把左边剩下的数字全部插入列表中,无需在做判断 while start < = mid: res.append(li[start]) start + = 1 while j < = end: res.append(li[j]) j + = 1 return res |
最后交给递归
def merge_sort(array): if len(array) == 1: return array left_array = merge_sort(array[:len(array) // 2]) right_array = merge_sort(array[len(array) // 2:]) return merge(left_array, right_array) def merge(left_array, right_array): left_index, right_index, merge_array = 0, 0, list() while left_index < len(left_array) and right_index < len(right_array): if left_array[left_index] <= right_array[right_index]: merge_array.append(left_array[left_index]) left_index += 1 else: merge_array.append(right_array[right_index]) right_index += 1 merge_array = merge_array + left_array[left_index:] + right_array[right_index:] return merge_array
作者: yetangjian
出处: https://www.cnblogs.com/yetangjian/p/16439834.html
关于作者: yetangjian
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(yetangjian@outlook.com)咨询.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2021-12-11 使用flask进行mock接口
2021-12-11 用python生成你想要的任意大小文件