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

上面是归并,下面是快排,随机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])


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

相关推荐

走不到的路就这样算了吗:大佬硬气
点赞 评论 收藏
分享
点赞 1 评论
分享
牛客网
牛客企业服务