排序算法--快速排序

快速排序是最經(jīng)典,最常用的高效排序算法之一??炫藕蜌w并排序算法一樣,采用的是分治的思想。具體步驟如下:

分:從未排序數(shù)組中選擇一個(gè)數(shù)組作為關(guān)鍵字,對(duì)序列進(jìn)行一次排序,是的關(guān)鍵詞左側(cè)的數(shù)的數(shù)都比關(guān)鍵字小,右側(cè)的數(shù)都比關(guān)鍵字大。
治:不用操作,分完已經(jīng)是有序的了。

  • 平均時(shí)間復(fù)雜度O(nlogn)
  • 空間復(fù)雜度:快排空間復(fù)雜度主要消耗在遞歸調(diào)用。
    最優(yōu)的情況下空間復(fù)雜度為:O(logn) ;每一次都平分?jǐn)?shù)組的情況
    最差的情況下空間復(fù)雜度為: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;
      }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 文章大綱:1.總體排序算法對(duì)比圖2.9種排序算法介紹 冒泡排序 算法描述 冒泡排序是一個(gè)平均時(shí)間復(fù)雜度為O(n^2...
    檸檬烏冬面閱讀 4,223評(píng)論 0 73
  • 快速排序,可以稱得上是21世紀(jì)最偉大的算法之一,它的性能也是相當(dāng)不錯(cuò)的,它的平均時(shí)間復(fù)雜度是O(nlogn)是一種...
    關(guān)瑋琳l(shuí)inSir閱讀 611評(píng)論 2 29
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,818評(píng)論 0 15
  • 概述排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部的...
    Luc_閱讀 2,370評(píng)論 0 35
  • 百度排名算法和收錄規(guī)則: http://blog.sina.com.cn/s/blog_a6fb96980102w...
    飛鳥顏閱讀 565評(píng)論 0 0

友情鏈接更多精彩內(nèi)容