千家信息网

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

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,Python实现归并排序算法归并排序1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。分治法的基本思想将
千家信息网最后更新 2026年11月01日好程序员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安全错误 数据库的锁怎样保障安全 A股互联网金融科技公司 互联网科技的 易互联网科技有限公司 互联网科技上市公司 伴你行互联网科技有限公司 科技大学互联网专业好不好 恒生科技互联网指数分析 深圳前海聚择互联网科技有限公司 哈尔滨新华互联网科技学院 宁夏众和广鑫互联网科技有限公司 来此购互联网科技有限公司 互联网公司科技股 互联网与医疗科技 米聚互联网科技南京有限公司排面 科技类公司包括互联网吗 深圳艾果互联网通讯科技 互联网时代的科技公司 工业互联网科技成果转化 西安左小互联网科技有限公司 互联网科技企业文化 广州大一互联网络科技有限公司 河南云网互联网络科技有限公司 中关村互联网科技集团 圆梦互联网科技 上海致骋互联网科技 卓越科技互联网 招聘 剑昆互联网络科技有限公司临桂 互联网金融科技公司干啥的 中国科技创新与世界互联网大会 互联网高科技行业有哪些企业
0