快速排序算法(JavaScript實現(xiàn))

快速排序采用分治法的一個非常典型的應用

算法思想

快速排序使用分治法策略來把一個序列分為兩個子序列芹彬,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分數(shù)據(jù)分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數(shù)據(jù)變成有序序列

時間復雜度

O(nlgn)

步驟:

  • 從數(shù)列中挑出一個元素窘行,稱為"基準"(pivot)
  • 所有比基準值小的元素擺放在基準前面蝗砾,所有比基準值大的元素擺在基準后面
  • 遞歸的把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序

舉例

現(xiàn)有一個數(shù)組:arr = [6,4,5,2,7]
那么先拿出一個基準:5
從左開始遍歷該數(shù)組:

6  4  5  2  7
|
大于5

如果大于基準5則放在基準右邊

4  5  6  2  7
      |
   放此位置

繼續(xù)遍歷:

4  5  6  2  7
|
小于5

如果小于基準5則放在基準左邊佑惠,故位置不變融欧,繼續(xù)遍歷:

4  5  6  2  7
         |
        小于5

則放在基準左邊:

4  2  5  6  7
   |
放此位置

那么我們的一次遍歷就完成了他炊,以此類推,再遍歷左邊序列以及右邊序列

代碼實現(xiàn)

常用實現(xiàn)方法如下咧擂,cjava都可以:

function quick_sort(arr,low,high){
  var i = low;
  var j = high;
  var temp = arr[i];
  if(low < high){
    while(i < j){
      while(i<j && arr[j] >= temp){
        j--;
      }
      arr[i] = arr[j];
      while(i<j && arr[i] <= temp){
        i++;
      }
      arr[j] = arr[i];
    }
    arr[i] = temp;
    quick_sort(arr,low,i-1);
    quick_sort(arr,i+1,high);
  }
  else{
    return;
  }
}

var arr = [6,4,5,2,7];
quick_sort(arr,0,arr.length-1)
console.log(arr);   // [2,4,5,6,7]

以下方法只適用于JavaScript,因為使用了JavaScript的數(shù)組的方法檀蹋,并且該方法空間復雜度比較大松申,因為多使用了兩個數(shù)組

function quick_sort(arr) {  
    if (arr.length <= 1) {
        return arr;
    }  
    var middle = Math.floor(arr.length / 2);  
    var pivot = arr.splice(middle, 1)[0];  
    var low = [];  
    var high = [];  
    for (var i = 0; i < arr.length; i++) {    
        if (arr[i] < pivot) {      
            low.push(arr[i]);    
        } else {      
            high.push(arr[i]);    
        }  
    }  
    return quickSort(low).concat([middleValue], quickSort(high));
}

var arr = [6,4,5,2,7];
quick_sort(arr);  // [2,4,5,6,7]

優(yōu)化思路

  • 對于小數(shù)組,可以采用插入排序俯逾,避免遞歸調(diào)用
  • 采用子數(shù)組的一部分元素的中位數(shù)來切分數(shù)組
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贸桶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子桌肴,更是在濱河造成了極大的恐慌皇筛,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坠七,死亡現(xiàn)場離奇詭異水醋,居然都是意外死亡,警方通過查閱死者的電腦和手機彪置,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門拄踪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拳魁,你說我怎么就攤上這事惶桐。” “怎么了潘懊?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵耀盗,是天一觀的道長。 經(jīng)常有香客問我卦尊,道長叛拷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任岂却,我火速辦了婚禮忿薇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘躏哩。我一直安慰自己署浩,他們只是感情好,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布扫尺。 她就那樣靜靜地躺著筋栋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪正驻。 梳的紋絲不亂的頭發(fā)上弊攘,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天抢腐,我揣著相機與錄音,去河邊找鬼襟交。 笑死迈倍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的捣域。 我是一名探鬼主播啼染,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼焕梅!你這毒婦竟也來了迹鹅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤贞言,失蹤者是張志新(化名)和其女友劉穎徒欣,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蜗字,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡打肝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了挪捕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片粗梭。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖级零,靈堂內(nèi)的尸體忽然破棺而出断医,到底是詐尸還是另有隱情,我是刑警寧澤奏纪,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布鉴嗤,位于F島的核電站,受9級特大地震影響序调,放射性物質(zhì)發(fā)生泄漏醉锅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一发绢、第九天 我趴在偏房一處隱蔽的房頂上張望硬耍。 院中可真熱鬧,春花似錦边酒、人聲如沸经柴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坯认。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間牛哺,已是汗流浹背陋气。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荆隘,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓赴背,卻偏偏與公主長得像椰拒,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子凰荚,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一燃观、直接插入排序 直接插入排序(Insertion Sort)的基本思想是:每次將一個待排序的元素記錄,按其關(guān)鍵字...
    kevin16929閱讀 562評論 0 0
  • 簡單排序 冒泡排序:循環(huán)遍歷左右比較便瑟,較小者左移或較大者后移缆毁; 選擇排序:在未排序序列中找到最小者元素一次放到已排...
    王然Gondole閱讀 1,426評論 0 2
  • AOP基礎(chǔ) - 動態(tài)代理 1). 創(chuàng)建一個接口:Counter.java 2). 創(chuàng)建這個接口的實現(xiàn)類:Count...
    谷鴿不愛吃稻谷閱讀 315評論 0 1
  • 市場主流觀點: 比特幣雖然在設(shè)計理念上彌補了現(xiàn)有貨幣發(fā)行的不足践啄,但斷言其將成為未來貨幣可能還是言過其實浇雹,更確切的說...
    84b228c91111閱讀 237評論 1 1
  • 前言:單位舉辦業(yè)余攝影比賽,本人受托給獲獎作品配發(fā)三行詩屿讽,意在點染主題昭灵、伸發(fā)情感(圖集版權(quán)歸原作者所有)。 竊以為...
    云飛卿閱讀 528評論 8 8