快速排序的平均时间复杂度和最坏时间复杂度是?
A.O(n^2), O(n^2)
B.O(n^2), O(nlgn)
C.O(nlgn) , O(nlgn)
D.O(nlgn) , O(n^2)
正确答案是 D
快排最差情况递归调用栈高度O(n),平均情况递归调用栈高度O(logn),而不管哪种情况栈的每一层处理时间都是O(n),所以平均情况(最佳情况也是平均情况)的时间复杂度O(nlogn),最差情况的时间复杂度为O(n^2)
如果每一次寻找的基准基本都是中间值或者接近中间值的话,那么这就是最好的情况,此时,为nlogn,如果每次都是最大或最小的情况,那么此时为最差的情况,此时为n^2.
由于涉及到一个用来给数据分大小的值
随机快速排序的平均时间复杂度为O(nlogn),当数组为逆序的时候,按从小到大的顺序进行排序时为最差情况,时间复杂度为O(n^2)
如果基准数恰是中位数,每次只需遍历当前数组长度的一半即可排好一个数,如果基准数是极值,就和冒泡,选择没啥区别了
平均复杂度相当于目标index在中间,类似二分法,最坏情况,每次从头到尾遍历整个数组
平均就是数学期望,最坏的时候也就是在随机快速排序的partition过程的时候每次选取标志数的时候都大或者最小值,此时的时间复杂度为O(n^2)
从浏览器输入URL到展示页面的全流程是怎么样的?
叉树前序遍历的递归和非递归实现?
请你谈谈Cookie的弊端
cookies,sessionStorage 和 localStorage 的区别?
快排最差情况递归调用栈高度O(n),平均情况递归调用栈高度O(logn),而不管哪种情况栈的每一层处理时间都是O(n),所以平均情况(最佳情况也是平均情况)的时间复杂度O(nlogn),最差情况的时间复杂度为O(n^2)
如果每一次寻找的基准基本都是中间值或者接近中间值的话,那么这就是最好的情况,此时,为nlogn,如果每次都是最大或最小的情况,那么此时为最差的情况,此时为n^2.
由于涉及到一个用来给数据分大小的值
随机快速排序的平均时间复杂度为O(nlogn),当数组为逆序的时候,按从小到大的顺序进行排序时为最差情况,时间复杂度为O(n^2)
如果基准数恰是中位数,每次只需遍历当前数组长度的一半即可排好一个数,如果基准数是极值,就和冒泡,选择没啥区别了
平均复杂度相当于目标index在中间,类似二分法,最坏情况,每次从头到尾遍历整个数组
平均就是数学期望,最坏的时候也就是在随机快速排序的partition过程的时候每次选取标志数的时候都大或者最小值,此时的时间复杂度为O(n^2)