归并排序和快排速度怎么差距这么大,同样都是递归实现

上面是归并,下面是快排,随机1000000个数字排序
代码
def merger(left, right):
    if not left:
        return right
    if not right:
        return left

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

def merger_sort(arr):
    if len(arr)<=1:
        return arr
    
    mid=len(arr)//2

    left = merger_sort(arr[:mid])
    right = merger_sort(arr[mid:])

    return merger(left,right)


def quick_sort(arr):
    if len(arr)<=1:
        return arr

    t=arr[0]

    return quick_sort([x for x in arr[1:] if x <=t])+[t] +quick_sort([x for x in arr[1:] if x >t])


#笔试题目#
全部评论
你的两种实现都有很大问题…找本算法书看一下其他人怎么写的吧 我用的也是MBP,归并和快排是一个数量级,给你参考一下
点赞 回复 分享
发布于 2019-08-26 19:58
res.append(left.pop(0)) 这一句应该会比较耗时. C++里vector从头部删除元素的话需要将后续所有元素左移一位, 并不是O(1)的操作, Python应该也是类似.
点赞 回复 分享
发布于 2019-08-26 19:58
归并的时候添加元素这里耗时了吧
点赞 回复 分享
发布于 2019-08-26 19:47
可能是实现有点问题吧。我实现的没有这么大差距。
点赞 回复 分享
发布于 2019-08-26 19:43
因为你这个快排并不快
点赞 回复 分享
发布于 2019-08-26 19:36
可能实现有问题,两者差距没那么大
点赞 回复 分享
发布于 2019-08-26 19:31

相关推荐

不愿透露姓名的神秘牛友
06-27 14:11
很喜欢小米的新车,校招薪资每月22k,攒多久能买?
测试糕手手:别看工资,先看现金流存款。有50W存款以上再考虑,车是消耗品,选适合自己的重要。你有钱就当我没说过
点赞 评论 收藏
分享
05-07 17:58
门头沟学院 Java
wuwuwuoow:1.简历字体有些怪怪的,用啥写的? 2.Redis 一主二从为什么能解决双写一致性? 3.乐观锁指的是 SQL 层面的库存判断?比如 stock > 0。个人认为这种不算乐观锁,更像是乐观锁的思想,写 SQL 避免不了悲观锁的 4.奖项证书如果不是 ACM,说实话没什么必要写 5.逻辑过期时间为什么能解决缓存击穿问题?逻辑过期指的是什么 其实也没什么多大要改的。海投吧
简历中的项目经历要怎么写
点赞 评论 收藏
分享
06-20 21:22
已编辑
门头沟学院 Java
纯真的河老师在喝茶:答应了就跑啊,实习随便跑啊,别被pua了,md就是找个廉价劳动力,还平稳过度正式工,到时候跟你说没转正
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务