美文网首页程序员技术干货
快速排序的算法复杂度分析

快速排序的算法复杂度分析

作者: 疯狂的冰块 | 来源:发表于2017-06-06 02:44 被阅读1680次

以下是快排的java算法:

public class QuickSort {
    public static void quickSort(int a[], int start, int end) {
        if (start >= 0 && end <= a.length - 1 && start < end) {
            int low = start;
            int high = end;
            int splitKey = a[start];
            while (start < end) {
                while (start < end && a[end] >= splitKey) end--;
                a[start] = a[end];
                while (start < end && a[start] <= splitKey) start++;
                a[end] = a[start];
            }
            a[end] = splitKey;
            quickSort(a, low, start - 1);
            quickSort(a, start + 1, high);
        }
    }

    public static void quickSort(int a[]) {
        quickSort(a, 0, a.length - 1);
    }
}

大家都知道快排的时间复杂度是O(n*ln[n]),那么这个复杂度是如何计算出来的呢?

最好的情况下,每次划分对一个记录定位后,要记录的左侧子序列与右侧子序列的长度相同。在具有n个记录的序列中,一次划分需要对整个待划分序列扫描一遍,所需的时间为O(n)。

设$T_n$是对n个记录的序列进行排序的时间,每次划分后,正好把划分区域分为长度相等的连个子序列,显然T(0)=T(1) =1,则有:

image.png

最坏的情况下,待排序的记录序列正序或逆序,每次划分只能得到一个比上一次划分少一个记录的子序列,(另一个子序列为空)。此时,必须经过n-1次递归调用才能把所有记录定位,而且第i趟划分需要经过n-i次比较才能找个才能找到第i个记录的位置,因此时间复杂度为

image.png

平均情况下,设轴值记录的关键码第k小(1≤k≤n),则有:

image.png

由上式可推出如下两式:

image.png

两式相减,然后两边同除以n(n+1)得

image.png

又因为f(n)单调递减,单调有界数列极限定理,所以f(n)有界

image.png

此数称为欧拉常数,

约为 0.57721566490153286060651209

所以

image.png

所以

image.png

**如果有何处不当,请不吝赐教,一定多加完善。谢谢 **

参考资料:

【1】《算法设计与分析》第二版 王红梅

相关文章

  • 看图说话排序算法之归并排序

    归并排序和快速排序类似,都典型以递归方式实现的算法,归并排序的时间复杂度分析也和快速排序的时间复杂度分析类似。本文...

  • 快速排序&快速排序与归并排序的对比

    快速排序算法 快速排序算法是从上到下解决问题使用递归实现,通过巧妙的方式,实现原地排序 分析时间复杂度O(nlog...

  • 算法

    排序算法有哪些?最快的排序算法是哪个?手写一个冒泡排序手写快速排序代码快速排序的过程、时间复杂度、空间复杂度手写堆...

  • 排序算法

    快速排序 对于快速排序需要了解快速排序的平均复杂度?最坏复杂度?是否是稳定排序? 快速排序也是一种分治算法 归并排...

  • 数据结构与算法--排序

    常用的排序算法 如何分析一个“排序算法”? 排序算法的执行效率 最好情况、最坏情况、平均情况时间复杂度 时间复杂度...

  • 13、【排序】快速排序(3)

    6、时间复杂度分析 快速排序算法的时间复杂度一般认为是。简单理解:这个复杂度是一个期望(数学期望)复杂度,因为快速...

  • 算法

    排序算法有哪些? 最快的排序算法是哪个? 手写一个冒泡排序 手写快速排序代码 快速排序的过程、时间复杂度、空间复杂...

  • 快速排序

    冒泡算法复杂度n的平方,如果排序数据量变大时。排序算法需要的时间非常长,快速排序就是为了减少冒泡算法的复杂度产生的...

  • 2019年5月份找工作面试知识点总结

    面试知识点 算法和数据结构 常用算法排序算法各种排序算法的时间复杂度,是否稳定内部排序快速排序 nlgn 不稳定冒...

  • 1.3快速排序

    0.算法解决的问题 快速排序算法被评做二十世纪十大算法之一。 相比于其他排序算法,快速排序在 时间复杂度和空间复...

网友评论

    本文标题:快速排序的算法复杂度分析

    本文链接:https://www.haomeiwen.com/subject/mstgfxtx.html