千家信息网

好程序员Python学习路线分享实现归并排序算法

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,Python实现归并排序算法归并排序1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。分治法的基本思想将
千家信息网最后更新 2025年02月04日好程序员Python学习路线分享实现归并排序算法

Python实现归并排序算法


归并排序1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。


分治法的基本思想


将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。


归并排序的基本思想


排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了。


动画


(请在发表文章时插入 ms.webp 这张图片)


代码实现


```python

def merge(left, right):

'''合并和排序'''

i = 0

j = 0

result = []

length_left = len(left)

length_right = len(right)

while i < length_left and j < length_right:

# 逐个比较两个列表的元素

# 小的添加进新列表,大的留下继续比较

if left[i] <= right[j]:

result.append(left[i])

i += 1

else:

result.append(right[j])

j += 1

# 最后加上未比较的元素

result.extend(left[i:])

result.extend(right[j:])

return result

def merge_sort(lists):

'''归并排序入口,拆分列表'''

# 递归退出条件判断

length = len(lists)

if length <= 1:

return lists

# 递归拆分,取整,兼容py3

mid = length // 2

left = merge_sort(lists[:mid])

right = merge_sort(lists[mid:])

# 合并排序(归并排序)

return merge(left, right)


numbers = [4, 0, 7, 9, 2, 8, 1, 3, 6, 5]

assert merge_sort(numbers) == [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

```




排序 问题 递归 数组 部分 算法 元素 思想 有序 相似 两个 从中 代码 入口 典型 动画 同时 图片 文章 条件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小学生网络安全观后心得体会 服务器破碎 怎么修改数据库的时区 网络安全风险评估的形式 战地五服务器名字怎么输入中文 大学计算机网络技术是什么 余烬风暴一区是哪个服务器 软件开发技术基础答案百度文库 网络安全法规定运营这应当履行 中文的数据库类型 昆山互动网络技术有限公司 时钟服务器怎么更改 为什么服务器主机不动态分配 数据库一输入逗号就死机 小学网络安全人员管理制度 小学生信息网络安全图片 绝地求生中国地区玩哪个服务器 奔驰s320地图数据库 人头录音软件开发 上海大数据处理软件开发 网络安全宣传教育并 单位网络安全汇报总结 单片机和数据库哪个好学 求生之路2保存密码的服务器 ibm服务器水货 dede安装的数据库名称 重生细胞有哪些服务器 修复服务器系统的软件 软件开发组主管多少钱一年 塔科夫德国服务器名称
0