排序算法之快排

快速排序由C. A. R. Hoare在1962年提出劫映。它的基本思想是:通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小涤妒,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序搔扁,整個(gè)排序過(guò)程可以遞歸進(jìn)行渣触,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列羡棵。

設(shè)要排序的數(shù)組是A[0]……A[N-1],首先任意選取一個(gè)數(shù)據(jù)(通常選用數(shù)組的第一個(gè)數(shù))作為關(guān)鍵數(shù)據(jù)嗅钻,然后將所有比它小的數(shù)都放到它前面皂冰,所有比它大的數(shù)都放到它后面,這個(gè)過(guò)程稱(chēng)為一趟快速排序养篓。值得注意的是秃流,快速排序不是一種穩(wěn)定的排序算法,也就是說(shuō)柳弄,多個(gè)相同的值的相對(duì)位置也許會(huì)在算法結(jié)束時(shí)產(chǎn)生變動(dòng)舶胀。詳細(xì)算法實(shí)現(xiàn)如下:

void sort(int a[],intleft,intright)
{
    if(left >= right)/*如果左邊索引大于或者等于右邊的索引就代表已經(jīng)整理完成一個(gè)組了*/
    {
        return;
     }
    int i = left;
    int j = right;
    int key = a[left];
    while(i < j)/*控制在當(dāng)組內(nèi)尋找一遍*/
    {
        while(i < j && key <= a[j])
        /*而尋找結(jié)束的條件就是概说,1,找到一個(gè)小于或者大于key的數(shù)(大于或小于取決于你想升序還是降序)2嚣伐,沒(méi)有符合條件1的糖赔,并且i與j的大小沒(méi)有反轉(zhuǎn)*/
        {
            j--;/*向前尋找*/
        }
        a[i] = a[j];
        /*找到一個(gè)這樣的數(shù)后就把它賦給前面的被拿走的i的值(如果第一次循環(huán)且key是a[left],那么就是給key)*/
        while(i < j && key >= a[i])
        /*這是i在當(dāng)組內(nèi)向前尋找轩端,同上放典,不過(guò)注意與key的大小關(guān)系停止循環(huán)和上面相反,
        因?yàn)榕判蛩枷胧前褦?shù)往兩邊扔基茵,所以左右兩邊的數(shù)大小與key的關(guān)系相反*/
        {
            i++;
        }
        a[j] = a[i];
    }
    a[i] = key;/*當(dāng)在當(dāng)組內(nèi)找完一遍以后就把中間數(shù)key回歸*/
    sort(a, left, i - 1);/*最后用同樣的方式對(duì)分出來(lái)的左邊的小組進(jìn)行同上的做法*/
    sort(a, i + 1, right);/*用同樣的方式對(duì)分出來(lái)的右邊的小組進(jìn)行同上的做法*/
    /*當(dāng)然最后可能會(huì)出現(xiàn)很多分左右奋构,直到每一組的i = j 為止*/
}

如果待排序序列是絕對(duì)隨機(jī),快排是排序速度最快的排序方式拱层,平均時(shí)間復(fù)雜度:O(nlgn)弥臼,最壞:O(n^2),空間復(fù)雜度:O(nlgn)根灯。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末醋火,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子箱吕,更是在濱河造成了極大的恐慌,老刑警劉巖柿冲,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茬高,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡假抄,警方通過(guò)查閱死者的電腦和手機(jī)怎栽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宿饱,“玉大人熏瞄,你說(shuō)我怎么就攤上這事∶裕” “怎么了强饮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)为黎。 經(jīng)常有香客問(wèn)我邮丰,道長(zhǎng),這世上最難降的妖魔是什么铭乾? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任剪廉,我火速辦了婚禮,結(jié)果婚禮上炕檩,老公的妹妹穿的比我還像新娘斗蒋。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布泉沾。 她就那樣靜靜地躺著捞蚂,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爆哑。 梳的紋絲不亂的頭發(fā)上洞难,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音揭朝,去河邊找鬼队贱。 笑死,一個(gè)胖子當(dāng)著我的面吹牛潭袱,可吹牛的內(nèi)容都是我干的柱嫌。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼屯换,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼编丘!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起彤悔,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤嘉抓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后晕窑,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體抑片,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年杨赤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了敞斋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疾牲,死狀恐怖植捎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阳柔,我是刑警寧澤焰枢,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站舌剂,受9級(jí)特大地震影響医咨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜架诞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一拟淮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谴忧,春花似錦很泊、人聲如沸角虫。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)戳鹅。三九已至,卻和暖如春昏兆,著一層夾襖步出監(jiān)牢的瞬間枫虏,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工爬虱, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留隶债,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓跑筝,卻偏偏與公主長(zhǎng)得像死讹,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子曲梗,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

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

  • 總結(jié)一下常見(jiàn)的排序算法赞警。 排序分內(nèi)排序和外排序。內(nèi)排序:指在排序期間數(shù)據(jù)對(duì)象全部存放在內(nèi)存的排序虏两。外排序:指在排序...
    jiangliang閱讀 1,334評(píng)論 0 1
  • 概述 排序有內(nèi)部排序和外部排序愧旦,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大定罢,一次不能容納全部...
    蟻前閱讀 5,168評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序忘瓦,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大引颈,一次不能容納全部...
    每天刷兩次牙閱讀 3,729評(píng)論 0 15
  • 畫(huà)張小清新的花兒,感覺(jué)自己又回到了童年境蜕。 第一次看著自己拍的照片畫(huà)蝙场,差距很大,畫(huà)不出想要的效果和感覺(jué)粱年,說(shuō)明畫(huà)功不足...
    四丫xmh閱讀 323評(píng)論 2 1
  • 有這樣一則故事: 在一群嬉戲的小孩中售滤,一個(gè)女巫握著一個(gè)小孩子的手說(shuō):“你將成為世人矚目的名人√ㄊ”幾十年后完箩,女巫的話...
    哎小丫閱讀 627評(píng)論 0 0