快排及优化

int Partition(int *a,int left,int right)
{
    int pivotkey;
    pivotkey=a[left];
    while (left<right)
    {
        while (left<right && a[right]>=temp)
            --right;
        //a[left]=a[right];

        swap(a[left], a[right]);

        while (left<right && a[left]<=temp)
            ++left;
        //a[right]=a[left];

       swap(a[left],a[right]);

    }
    //a[left]=temp;
    return left;
}
void QuickSort(int *a,int left,int right)
{
    int pivot;
    if (left>=right)
        return;
    pivot=Partition(a,left,right);
    QuickSort(a,left,pivot-1);
    QuickSort(a,pivot+1,right);
}

复杂度分析

快排最优的复杂度为o(nlogn)
最差时的复杂度为正序逆序时候,复杂度为o(n^2)
因为采用递归,造成栈空间的使用,空间复杂度为o(nlogn),

快速排序优化

  1. 优化选取的枢轴:
    选取三个数,取中间大小的数作为枢轴,一般选取最左边,中间和最右边的三个数

  2. 优化不必要的交换:
    如代码上 // 的代码

  3. 当数组较小时候,采用插入排序算法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文有七千字,阅读大约需要占用你10分钟时间。 好吧。。随便写的,我也不知道会花多久看完。因为写的比较烂,而且只是...
    锅与盆阅读 8,439评论 5 36
  • 该系列文章主要是记录下自己暑假这段时间的学习笔记,暑期也在实习,抽空学了很多,每个方面的知识我都会另起一篇博客去记...
    Yanci516阅读 12,653评论 6 19
  • 再温排序 先来个总览,知其庞然大体,而入之其微,后而一窝端 需要先知道的几个概念: 稳定排序:在待排序的文件中,若...
    dooze阅读 1,089评论 0 2
  • 即使是麻木的自己也晚安 类似深渊的感觉。
    14fbcf2b962d阅读 192评论 0 0
  • “晓玲,我去上班啦,一个人在家要乖乖的,困了就先睡,不用担心我~” 橙红的夕阳斜照在四合院赭石色的砖墙上,一阵燥热...
    掠过雨的云阅读 397评论 1 1

友情链接更多精彩内容