2.找实习笔记二:用python写排序(二) 归并排序算法

归并排序算法是一个稳定的算法:所谓稳定的意思就是列表中相同元素的先后顺序在排序前后不变。其速度仅次于快排。一般用于对总体无序,但是各子项相对有序的列表。时间复杂度为O(nlogn),空间复杂度为O(n)

归并排序的宗旨为:将元素分组,组内排序,排完合并,例如,将列表中两两分为一组,组内排序,待排好之后,再将两两合并,变为四个四个一组,然后排序,直到所有元素合为一组。

难点在于:如何合并:合并这里用到了指针操作,用两个指针分别指向需要合并的list1和list2,如果指针1的元素小于指针2的元素,则将该元素存入返回值,指针1后移,如果指针2的元素比较小,则将该元素存入返回值,指针2后移,知道某list的元素都遍历完,将另外一个list的元素直接加到返回值的最后。代码如下:

def merge_sort(nums):
    if len(nums)<=1:
        return nums
    k=len(nums)//2
    left=merge_sort(nums[:k])
    right=merge_sort(nums[k:])
    return merge(left,right)

def merge(left,right):
    i,j=0,0
    res=[]
    while i<len(left) and j<len(right):
        if left[i]<=right[j]:
            res.append(left[i])
            i=i+1
        else:
            res.append(right[j])
            j=j+1
    res+=left[i:]
    res+=right[j:]
    return res
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值