Python中如何实现归并排序?

来源:编程网作者:相泽南头衔:网络博主
导读:本期聚焦于小伙伴创作的《Python中如何实现归并排序?》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《Python中如何实现归并排序?》有用,将其分享出去将是对创作者最好的鼓励。

归并排序是采用分治思想实现的经典排序算法,核心逻辑是将一个无序数组不断拆分成更小的子数组,直到子数组只剩下一个元素,再将这些有序的子数组逐步合并成最终的有序数组,整个过程分为拆分和合并两个核心阶段。

归并排序的核心原理

归并排序的分治过程可以分为两个明确的步骤:

  • 拆分阶段:将长度为n的数组递归拆分成两个长度约为n/2的子数组,直到每个子数组的长度为1,此时单个元素的数组默认是有序的。
  • 合并阶段:将两个已经有序的子数组合并成一个新的有序数组,合并时需要比较两个子数组的当前元素,将较小的元素先放入结果数组,直到其中一个子数组被遍历完,再把另一个子数组剩余的元素全部放入结果数组。

Python实现归并排序的完整代码

归并排序的实现需要两个函数,一个是负责拆分数组的递归函数,另一个是负责合并两个有序子数组的函数,具体代码如下:

# 合并两个有序子数组的函数
def merge(left_arr, right_arr):
    result = []
    i = 0  # 左数组的指针
    j = 0  # 右数组的指针
    # 比较两个数组的当前元素,将较小的放入结果数组
    while i < len(left_arr) and j < len(right_arr):
        if left_arr[i] <= right_arr[j]:
            result.append(left_arr[i])
            i += 1
        else:
            result.append(right_arr[j])
            j += 1
    # 将剩余的元素追加到结果数组
    if i < len(left_arr):
        result.extend(left_arr[i:])
    if j < len(right_arr):
        result.extend(right_arr[j:])
    return result

# 归并排序主函数
def merge_sort(arr):
    # 数组长度小于等于1时直接返回,无需排序
    if len(arr) <= 1:
        return arr
    # 找到中间索引,拆分左右子数组
    mid = len(arr) // 2
    left = merge_sort(arr[:mid])
    right = merge_sort(arr[mid:])
    # 合并两个有序子数组
    return merge(left, right)

# 测试代码
if __name__ == "__main__":
    test_arr = [38, 27, 43, 3, 9, 82, 10]
    sorted_arr = merge_sort(test_arr)
    print("原始数组:", test_arr)
    print("排序后数组:", sorted_arr)

代码逻辑解析

上述代码中,merge_sort函数是递归拆分的核心,每次将数组从中间分成两部分,分别递归调用自身处理左右两部分,直到子数组长度为1。之后调用merge函数合并两个有序子数组,合并过程中通过双指针遍历两个子数组,保证合并后的数组依然有序。

测试代码的输出结果如下:

原始数组: [38, 27, 43, 3, 9, 82, 10]
排序后数组: [3, 9, 10, 27, 38, 43, 82]

归并排序的特性分析

时间复杂度

归并排序的时间复杂度在任何情况下都是O(n log n),因为拆分阶段需要log n层递归,每一层的合并操作总复杂度是O(n),因此整体复杂度稳定,不会受输入数组有序程度的影响。

空间复杂度

归并排序在合并过程中需要额外的数组存储合并结果,因此空间复杂度为O(n),相比冒泡排序、插入排序等原地排序算法,空间开销更大。

稳定性

归并排序是稳定的排序算法,在合并两个子数组时,如果左右两个元素相等,优先取左子数组的元素,因此相同元素的相对位置不会改变。

适用场景

归并排序适合处理大规模数据排序,尤其是当数据量较大、对排序稳定性有要求,且可以接受额外空间开销的场景。在Python中,内置的sorted函数和list.sort方法采用的是TimSort算法,它是归并排序和插入排序的结合优化版本,底层也用到了归并排序的核心合并逻辑。

Python归并排序排序算法分治算法修改时间:2026-07-15 13:27:29

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。