[圖解] 快速排序

1. 經(jīng)典快速排序圖示過程

(1) 經(jīng)典快速排序的總體流程

(2) 根據(jù)基準值分區(qū)的過程

[算法題] 荷蘭國旗問題中有詳細的介紹。

2. 隨機快速排序

經(jīng)典快速排序總是指定數(shù)組或者某部分的最后一個元素作為基準值吵聪,隨機快速排序指定數(shù)組或者某一部分中的隨機值作為基準值。

3. 動圖展示

quickSort.gif

4. 隨機快速排序Java代碼實現(xiàn)

/**
 * 快速排序体箕,使得整數(shù)數(shù)組 arr 有序
 */
public static void quickSort(int[] arr) {
    if (arr == null || arr.length < 2) {
        return;
    }
    quickSort(arr, 0, arr.length - 1);
}

/**
 * 快速排序柏副,使得整數(shù)數(shù)組 arr 的 [L, R] 部分有序
 */
public static void quickSort(int[] arr, int L, int R) {
    if(L < R) {
        // 把數(shù)組中隨機的一個元素與最后一個元素交換宛琅,這樣以最后一個元素作為基準值實際上就是以數(shù)組中隨機的一個元素作為基準值
        swap(arr, new Random().nextInt(R - L + 1) + L, R);
        int[] p = partition(arr, L, R);
        quickSort(arr, L, p[0] - 1);
        quickSort(arr, p[1] + 1, R);
    }
}

/**
 * 分區(qū)的過程,整數(shù)數(shù)組 arr 的[L, R]部分上蒋腮,使得:
 *   大于 arr[R] 的元素位于[L, R]部分的右邊淘捡,但這部分數(shù)據(jù)不一定有序
 *   小于 arr[R] 的元素位于[L, R]部分的左邊,但這部分數(shù)據(jù)不一定有序
 *   等于 arr[R] 的元素位于[L, R]部分的中間
 * 返回等于部分的第一個元素的下標和最后一個下標組成的整數(shù)數(shù)組
 */
public static int[] partition(int[] arr, int L, int R) {

    int basic = arr[R];
    int less = L - 1;
    int more = R + 1;
    while(L < more) {
        if(arr[L] < basic) {
            swap(arr, ++less, L++);
        } else if (arr[L] > basic) {
            swap(arr, --more, L);
        } else {
            L++;
        }
    }

    return new int[] { less + 1, more - 1 };

}

/*
 * 交換數(shù)組 arr 中下標為 i 和下標為 j 位置的元素
 */
public static void swap(int[] arr, int i, int j) {
    int temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp;
}

5. 復雜度

  • 時間復雜度:O(nlogn)
  • 空間復雜度:快速排序使用遞歸池摧,遞歸使用棧焦除,因此它的空間復雜度為O(logn)
  • 穩(wěn)定性:快速排序無法保證相等的元素的相對位置不變,因此它是不穩(wěn)定的排序算法
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末作彤,一起剝皮案震驚了整個濱河市膘魄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竭讳,老刑警劉巖创葡,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異绢慢,居然都是意外死亡灿渴,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門胰舆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來骚露,“玉大人,你說我怎么就攤上這事缚窿〖遥” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵倦零,是天一觀的道長误续。 經(jīng)常有香客問我,道長扫茅,這世上最難降的妖魔是什么女嘲? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮诞帐,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘爆雹。我一直安慰自己停蕉,他們只是感情好愕鼓,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著慧起,像睡著了一般菇晃。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蚓挤,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天磺送,我揣著相機與錄音,去河邊找鬼灿意。 笑死估灿,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的缤剧。 我是一名探鬼主播馅袁,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼荒辕!你這毒婦竟也來了汗销?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤抵窒,失蹤者是張志新(化名)和其女友劉穎弛针,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體李皇,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡削茁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了疙赠。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片付材。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖圃阳,靈堂內(nèi)的尸體忽然破棺而出厌衔,到底是詐尸還是另有隱情,我是刑警寧澤捍岳,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布富寿,位于F島的核電站,受9級特大地震影響锣夹,放射性物質(zhì)發(fā)生泄漏页徐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一银萍、第九天 我趴在偏房一處隱蔽的房頂上張望变勇。 院中可真熱鬧,春花似錦、人聲如沸搀绣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽链患。三九已至巧鸭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間麻捻,已是汗流浹背纲仍。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贸毕,地道東北人郑叠。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像崖咨,于是被迫代替她去往敵國和親锻拘。 傳聞我的和親對象是個殘疾皇子杠愧,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348

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

  • 4 快速排序 4.1 分而治之(divide and conquer侮腹,D&C) 一種解決問題的思路:將新問題遞歸到...
    廢柴社閱讀 899評論 1 1
  • 1. 分而治之分而治之(divide and conquer霍弹,D&C)——一種著名的遞歸式問題解決方法靴寂》档快速排就是...
    YCzhao閱讀 6,741評論 0 5
  • 概述 排序有內(nèi)部排序和外部排序弱判,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序慧耍,而外部排序是因排序的數(shù)據(jù)很大履因,一次不能容納全部...
    蟻前閱讀 5,168評論 0 52
  • 1 初級排序算法 排序算法關(guān)注的主要是重新排列數(shù)組元素类咧,其中每個元素都有一個主鍵馒铃。排序算法是將所有元素主鍵按某種方...
    深度沉迷學習閱讀 1,394評論 0 1
  • 在過去的20年里值戳,我不只一次的夢到那一條條的羊腸小路议谷。那路很窄,路的兩側(cè)是緊湊堕虹、低矮又有些七扭八歪的房子卧晓。那路很是...
    小漁小姐閱讀 319評論 0 1