归并排序Python

本文详细介绍了归并排序的分治法思想,通过分解、排序和合并步骤实现数组的排序。归并排序的时间复杂度为O(nlogn),且是稳定的排序算法。文中给出了完整的Python代码实现,并展示了对一个示例数组的排序过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

归并排序

归并排序采用的是分治法的思想来进行排序的。

基本思想:分治法

分:先递归分解数组,将数组分解成最小的一个个元素

治:分解后的数组依次进行排序,最后合并数组。

最后得到了排好序的数组。

此处借鉴一张网上的图

在这里插入图片描述

时间复杂度:O(nlogn)

注意:归并排序是稳定的排序

代码:

def merge(left_arr, right_arr):
    """合并操作:将两个有序数组合并为一个有序数组"""

    left_index, right_index = 0, 0  # left_index, right_index 分别表示左边列表和右边列表的索引号
    result = []

    # 当左边列表或者右边列表走到头了,循环结束
    while left_index < len(left_arr) and right_index < len(right_arr):
        if left_arr[left_index] < right_arr[right_index]:
            result.append(left_arr[left_index])
            left_index += 1
        else:
            result.append(right_arr[right_index])
            right_index += 1
    result += (left_arr[left_index:])   # 把多余一边的元素给加到 result 列表中
    result += (right_arr[right_index:])
    return result

# 归并排序
def merge_sort(arr):
    if len(arr) <= 1:
        return arr
    mid = len(arr) // 2
    left_arr = merge_sort(arr[:mid])
    right_arr = merge_sort(arr[mid:])
    merge_arr = merge(left_arr, right_arr)
    return merge_arr

调用归并排序:

nums = [1,3,2,4,7,5,6,8,10,9]
print(merge_sort(nums))

输出结果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值