排序算法--快速排序

快速排序是最经典,最常用的高效排序算法之一。快排和归并排序算法一样,采用的是分治的思想。具体步骤如下:

分:从未排序数组中选择一个数组作为关键字,对序列进行一次排序,是的关键词左侧的数的数都比关键字小,右侧的数都比关键字大。
治:不用操作,分完已经是有序的了。

  • 平均时间复杂度O(nlogn)
  • 空间复杂度:快排空间复杂度主要消耗在递归调用。
    最优的情况下空间复杂度为:O(logn) ;每一次都平分数组的情况
    最差的情况下空间复杂度为:O( n ) ;退化为冒泡排序的情况
class Solution
{
      int quickSortPartition(vector<int> & array, int start, int end)
      {
          int pivot = array[start];
          int i = start, j = end;
          while(i < j)
          {
              while((array[j] >= pivot) && (i < j)) //这里必须加上 i < j的判断
                      j--;
              while((array[i] < pivot) && (i < j))
                     i++;
              swap(array[i],array[j]);
          }
          swap(array[start], array[i]); 
          return i;  //最后返回partition的位置
      }
      void quickSortHelper(vector<int> & array, int start, int end)
      {
          if(start < end)
          {
               int mid = quickSortPartition(array,start,end);
               quickSortHelper(array,start,mid);
               quickSortHelper(array,mid+1,end);
          }
          return;
      }
      void quickSort(vector<int> & array)
      {
            int num = array.size();
            quickSortHelper(array,0,array.size()-1);
            return;
      }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 文章大纲:1.总体排序算法对比图2.9种排序算法介绍 冒泡排序 算法描述 冒泡排序是一个平均时间复杂度为O(n^2...
    柠檬乌冬面阅读 9,565评论 0 73
  • 快速排序,可以称得上是21世纪最伟大的算法之一,它的性能也是相当不错的,它的平均时间复杂度是O(nlogn)是一种...
    关玮琳linSir阅读 3,633评论 2 29
  • 概述:排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    每天刷两次牙阅读 9,100评论 0 15
  • 概述排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的...
    Luc_阅读 6,811评论 0 35
  • 百度排名算法和收录规则: http://blog.sina.com.cn/s/blog_a6fb96980102w...
    飞鸟颜阅读 3,508评论 0 0

友情链接更多精彩内容