Python归并排序

归并排序是一种分治算法,它将数组分成两半,分别对这两半进行排序,然后将排序后的两半合并在一起。归并排序是一种稳定的排序算法,时间复杂度为O(n log n),其中n是数组中元素的数量。

以下是Python实现归并排序的一个例子:

python 复制代码
def merge_sort(arr):
    if len(arr) > 1:
        mid = len(arr) // 2  # 找到中间索引
        L = arr[:mid]  # 左半部分
        R = arr[mid:]  # 右半部分

        merge_sort(L)  # 递归地排序左半部分
        merge_sort(R)  # 递归地排序右半部分

        # 合并两个有序数组
        i = j = k = 0

        # 复制数据到临时数组L[]
        while i < len(L) and j < len(R):
            if L[i] < R[j]:
                arr[k] = L[i]
                i += 1
            else:
                arr[k] = R[j]
                j += 1
            k += 1

        # 复制左半部分剩余的数据
        while i < len(L):
            arr[k] = L[i]
            i += 1
            k += 1

        # 复制右半部分剩余的数据
        while j < len(R):
            arr[k] = R[j]
            j += 1
            k += 1

# 测试代码
arr = [12, 11, 13, 5, 6, 7]
print("未排序的数组:", arr)
merge_sort(arr)
print("排序后的数组:", arr)

这个例子中,merge_sort函数首先找到数组的中间索引,然后将数组分为两部分,递归地对这两部分进行排序。最后,使用一个循环将排序后的两个数组合并为一个有序数组。

相关推荐
老鼠只爱大米1 分钟前
LeetCode经典算法面试题 #236:二叉树的最近公共祖先(RMQ转化、Tarjan离线算法等五种实现方案详细解析)
算法·leetcode·二叉树·lca·并查集·最近公共祖先·rmq
问好眼2 分钟前
【信息学奥赛一本通】1296:开餐馆
c++·算法·动态规划·信息学奥赛
rose and war4 分钟前
python和jinja版本问题导致的访问报500
python·ios
虫小宝5 分钟前
淘客系统的容灾演练与恢复:Java Chaos Monkey模拟节点故障下的服务降级与快速切换实践
java·开发语言
小鸡吃米…6 分钟前
机器学习 - 感知机(Perceptron)
人工智能·python·机器学习
yxm26336690817 分钟前
【洛谷压缩技术续集题解】
java·开发语言·算法
键盘帽子9 分钟前
多线程情况下长连接中的session并发问题
java·开发语言·spring boot·spring·spring cloud
毅炼15 分钟前
Java 基础常见问题总结(1)
开发语言·python
无名-CODING20 分钟前
Spring事务管理完全指南:从零到精通(上)
java·数据库·spring
风栖柳白杨20 分钟前
【语音识别】Qwen3-ASR原理及部署
人工智能·python·语音识别·xcode·audiolm