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函数首先找到数组的中间索引,然后将数组分为两部分,递归地对这两部分进行排序。最后,使用一个循环将排序后的两个数组合并为一个有序数组。

相关推荐
IUGEI3 分钟前
synchronized的工作机制是怎样的?深入解析synchronized底层原理
java·开发语言·后端·c#
q***13618 分钟前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
z***I3948 分钟前
Java桌面应用案例
java·开发语言
r***123828 分钟前
SpringBoot最佳实践之 - 使用AOP记录操作日志
java·spring boot·后端
间彧32 分钟前
Java进程内存深度解析:从JVM组件内存到RSS的全面视角
java
一个不知名程序员www33 分钟前
算法学习入门---vector(C++)
c++·算法
间彧38 分钟前
对比GraalVM Native Image与传统JVM,在内存管理方面各自适合哪些具体业务场景?
java
合作小小程序员小小店39 分钟前
web网页,在线%抖音,舆情,线性回归%分析系统demo,基于python+web+echart+nlp+线性回归,训练,数据库mysql
python·自然语言处理·回归·nlp·线性回归
云飞云共享云桌面39 分钟前
无需配置传统电脑——智能装备工厂10个SolidWorks共享一台工作站
运维·服务器·前端·网络·算法·电脑
q***25140 分钟前
Python中的简单爬虫
爬虫·python·信息可视化