不太理解快速排序算法的时间复杂度

来源:3-6 随机化快速排序法

松柏i

2019-07-22

(即每个结点都把当前数组分成两个大小相等的数组结点,n个元素数组的根结点的分解次数就构成一棵完全二叉树)。这时分解次数等于完全二叉树的深度log2n;每次快速排序过程无论把数组怎样划分、全部的比较次数都接近于n-1次,所以最好情况下快速排序算法的时间复杂度为O(nlog2n):

这是我在网上找到分析时间复杂度的资料,我的疑问是,为什么分解的次数等于完全二叉树的深度呢?如果这样类比,二分搜索并不需要将每个结点都走一遍,而快速排序要经过每个节点呀?我的理解有错误吗?

写回答

1回答

liuyubobobo

2019-07-22

为什么分解的次数等于二叉树的深度?


n个元素,一分为2;

每n/2个元素,再一分为2;

每n/4个元素,再一分为2;

...

最后分到只剩下一个元素。

一共多少层?log2(n)这么多层。就是二叉树的深度。


当然了,由于快排每次分割点不确定,是随机的,所以真正计算快排的时间复杂度,计算的是期望值。这已经远远超出这个课程的内容了。在算法导论中,讲解快排的时候,有快排复杂度证明的严格推导,感兴趣可以参考。


也可以参考这里:https://coding.imooc.com/learn/questiondetail/15858.html


2

二分搜索并不需要将每个结点都走一遍?


是的。二分搜索的过程,根据当前要搜索的元素和中间元素的大小,选择继续在左边或者右边的一边,进行搜索就好了;

但是快排,排完左边,还要排右边,两边都需要兼顾:)


继续加油!:)

0
1
松柏i
非常感谢!
2019-07-23
共1条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程