9种排序算法---合并排序算法

使用合并排序法为应该数列排序时,首先将无序的数列分成若干小份,分若干份的的规则是不断把每一段数列长度除以2,直到不能再分。然后最小份进行排序,最后再逐步合并为一个有序数列

废话不多说,上代码:

def merge_sort(data):
    if len(data) <= 1:
        return data
    mid = len(data) // 2
    left = merge_sort(data[:mid])
    right = merge_sort(data[mid:])

    result = []
    while left and right:
        if left[0] < right[0]:
            result.append(left.pop(0))
        else:
            result.append(right.pop(0))
    if left:
        result += left
    if right:
        result += right
    return result

print(merge_sort([3, 11, 4, 1, 15, 9, 2, 6, 13, 5]))
# 输出: [1, 2, 3, 4, 5, 6, 9, 11, 13, 15]

 代码解析:

        (1)有这样一组数列,现在我们对其进行递增排序

         (2)将原始数列一分为二,得到数列1和数列2

         (3)再将数列1和2一分为二,得到数列A,数列B,数列C,数列D

         (4)分别对数列A,数列B,数列C,数列D进行排序,然后合并得到数列a,数列b

         (5)最后将数列a,数列b合并后排序得到最终结果

总结:

         归并排序是一种高效的排序算法,适用于大数据集。它的时间复杂度为O(n log n),其中n是数组的长度。归并排序是稳定的排序算法,即相等的元素在排序后保持它们原来的顺序

注意事项

  1. 递归深度:虽然归并排序的时间复杂度是O(n log n),但是它的空间复杂度也是O(n),因为它需要额外的空间来存储临时数组。对于非常大的数据集,递归深度可能会成为一个问题,可能会导致栈溢出。

  2. 原地排序:这段代码不是原地排序算法,因为它需要额外的空间来存储临时数组。如果需要原地排序,可以使用其他算法,如快速排序。

  3. 稳定性:归并排序是稳定的排序算法,这意味着相等的元素在排序后保持它们原来的顺序。这对于某些应用来说是非常重要的。

平均时间复杂度最坏时间复杂度空间复杂度
合并排序法O(n log n)O(n log n)O(n)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值