快速排序——另一個(gè)角度的理解

快速排序算法通過多次比較和交換來實(shí)現(xiàn)排序,其排序流程如下:

(1)首先設(shè)定一個(gè)分界值兢哭,通過該分界值將數(shù)組分成左右兩部分占调。?

(2)將大于或等于分界值的數(shù)據(jù)集中到數(shù)組右邊,小于分界值的數(shù)據(jù)集中到數(shù)組的左邊啥纸。此時(shí),左邊部分中各元素都小于分界值婴氮,而右邊部分中各元素都大于或等于分界值斯棒。?

(3)然后盾致,左邊和右邊的數(shù)據(jù)可以獨(dú)立排序。對于左側(cè)的數(shù)組數(shù)據(jù)荣暮,又可以取一個(gè)分界值庭惜,將該部分?jǐn)?shù)據(jù)分成左右兩部分,同樣在左邊放置較小值渠驼,右邊放置較大值蜈块。右側(cè)的數(shù)組數(shù)據(jù)也可以做類似處理。

(4)重復(fù)上述過程迷扇,可以看出百揭,這是一個(gè)遞歸定義。通過遞歸將左側(cè)部分排好序后蜓席,再遞歸排好右側(cè)部分的順序器一。當(dāng)左、右兩個(gè)部分各數(shù)據(jù)排序完成后厨内,整個(gè)數(shù)組的排序也就完成了祈秕。

快速排序的重點(diǎn)在于用O(n)的時(shí)間復(fù)雜度把數(shù)組分為左右倆部分,一部分大雏胃,一部分小请毛,他們之間的分界是一開始取的分界值。

我們先定義一個(gè)數(shù)組int a[] = {93,27,30,2,8,12,2,8,30,89};我們?nèi)[0]作為分界值瞭亮,然后設(shè)置兩個(gè)變量方仿,一個(gè)從數(shù)組最左邊開始,另一個(gè)從數(shù)組最右邊開始统翩。我們先從右向左掃描仙蚜,如果發(fā)現(xiàn)元素比分界值小,就進(jìn)行交換厂汗,把小的元素扔到左邊過去委粉,這樣子第一次交換分界值a[0]就換到了右邊的位置,這時(shí)候我們就應(yīng)該從左往右掃描了娶桦,因?yàn)檫@時(shí)候分界值的右邊以及排序好了贾节,都是比分界值大的元素,然后再從右往左掃描衷畦,如此循環(huán)往復(fù)氮双,直到這兩個(gè)變量指針相遇為止。

這里有一個(gè)需要我們注意的點(diǎn)霎匈,如果我們把a(bǔ)[0]作為分界值,那么我們的第一次掃描應(yīng)該從右往左送爸,因?yàn)檫@時(shí)候分界值的左邊是默認(rèn)都比a[0]小的铛嘱。

從另一個(gè)角度理解暖释,我們其實(shí)也不一定要取數(shù)組的第一個(gè)元素或者最后一個(gè)元素作為分界值,我們可以隨便取中間的一個(gè)元素作為分界值墨吓,然后可以先從右邊掃描球匕,把小的元素都扔到數(shù)組左邊,然后再從數(shù)組左邊掃描帖烘,把大的元素放到分界值的右邊亮曹。但是這會(huì)造成一個(gè)問題,就是我們在第二次掃描的時(shí)候需要對分界值的位置進(jìn)行移動(dòng)秘症,其他數(shù)組元素的位置也跟著移動(dòng)照卦,這樣的時(shí)間復(fù)雜度就大了,這樣的代價(jià)是我們不能接受的乡摹。但是如果我們快速排序的不是數(shù)組役耕,而是鏈表里面的元素,就沒有這個(gè)問題了聪廉。

所以瞬痘,使用快速排序,如果是對于數(shù)組的話板熊,我們的分界符只能取數(shù)組的第一個(gè)元素或者最后一個(gè)元素框全。但是如果我們是對鏈表進(jìn)行快速排序的話,那么我們就無所謂取哪一個(gè)元素作為分界符了干签。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末津辩,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子筒严,更是在濱河造成了極大的恐慌丹泉,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸭蛙,死亡現(xiàn)場離奇詭異摹恨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)娶视,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門晒哄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肪获,你說我怎么就攤上這事寝凌。” “怎么了孝赫?”我有些...
    開封第一講書人閱讀 157,221評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵较木,是天一觀的道長。 經(jīng)常有香客問我青柄,道長伐债,這世上最難降的妖魔是什么预侯? 我笑而不...
    開封第一講書人閱讀 56,474評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮峰锁,結(jié)果婚禮上萎馅,老公的妹妹穿的比我還像新娘。我一直安慰自己虹蒋,他們只是感情好糜芳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,570評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著魄衅,像睡著了一般峭竣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徐绑,一...
    開封第一講書人閱讀 49,816評(píng)論 1 290
  • 那天邪驮,我揣著相機(jī)與錄音,去河邊找鬼傲茄。 笑死毅访,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的盘榨。 我是一名探鬼主播喻粹,決...
    沈念sama閱讀 38,957評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼草巡!你這毒婦竟也來了守呜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,718評(píng)論 0 266
  • 序言:老撾萬榮一對情侶失蹤山憨,失蹤者是張志新(化名)和其女友劉穎查乒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郁竟,經(jīng)...
    沈念sama閱讀 44,176評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡玛迄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,511評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了棚亩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蓖议。...
    茶點(diǎn)故事閱讀 38,646評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖讥蟆,靈堂內(nèi)的尸體忽然破棺而出勒虾,到底是詐尸還是另有隱情,我是刑警寧澤瘸彤,帶...
    沈念sama閱讀 34,322評(píng)論 4 330
  • 正文 年R本政府宣布修然,位于F島的核電站肛响,受9級(jí)特大地震影響过牙,放射性物質(zhì)發(fā)生泄漏锋爪。R本人自食惡果不足惜水泉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,934評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望掏婶。 院中可真熱鬧,春花似錦潭陪、人聲如沸雄妥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽老厌。三九已至,卻和暖如春黎炉,著一層夾襖步出監(jiān)牢的瞬間枝秤,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評(píng)論 1 266
  • 我被黑心中介騙來泰國打工慷嗜, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淀弹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,358評(píng)論 2 360
  • 正文 我出身青樓庆械,卻偏偏與公主長得像薇溃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子缭乘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,514評(píng)論 2 348

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