快速排序算法quick sort

當(dāng)n較大,則應(yīng)采用時(shí)間復(fù)雜度為O(nlog2n)的排序方法:快速排序客给、堆排序或歸并排序序用押。

是目前基于比較的內(nèi)部排序中被認(rèn)為是最好的方法,當(dāng)待排序的關(guān)鍵字是隨機(jī)分布時(shí)靶剑,快速排序的平均時(shí)間最短蜻拨;

快速排序采用的思想是分治思想池充。

快速排序是找出一個(gè)元素(理論上可以隨便找一個(gè))作為基準(zhǔn)(pivot),然后對數(shù)組進(jìn)行分區(qū)操作,使基準(zhǔn)左邊元素的值都不大于基準(zhǔn)值,基準(zhǔn)右邊的元素值都不小于基準(zhǔn)值,如此作為基準(zhǔn)的元素調(diào)整到排序后的正確位置缎讼。遞歸快速排序收夸,將其他n-1個(gè)元素也調(diào)整到排序后的正確位置。最后每個(gè)元素都是在排序后的正確位置血崭,排序完成卧惜。所以快速排序算法的核心算法是分區(qū)操作,即如何調(diào)整基準(zhǔn)的位置以及調(diào)整返回基準(zhǔn)的最終位置以便分治遞歸功氨。

取兩個(gè)指針:低位i和高位j

pivotkey與最高位比較序苏,如果高位大手幢,則不交換值捷凄,高位指針下移j--,直到高位小于pivotkey為止围来,高位賦值給低位跺涤;

再將最低位與pivotkey比較,如果低位小监透,則不交換值桶错,低位指針上移i++,知道低位大于pivotkey為止胀蛮,低位賦值給高位院刁;

這兩個(gè)循環(huán)到低位與高位相遇(相等)時(shí)停止,并將pivotkey賦值給低位粪狼。至此退腥,得到第一次劃分,劃分出的左右兩組分別進(jìn)入劃分(遞歸)再榄,最終得到排序狡刘。

java實(shí)現(xiàn):

java實(shí)現(xiàn)

private static void sort(int[] nums, int left, int right){

if(left < right){

int key = nums[left];

int low = left;

int high = right;

while(low < high){

while(low < high && nums[high] >= key){

high--;

}

nums[low] = nums[high];

while(low < high && nums[low] <= key){

low++;

}

nums[high] = nums[low];

}

nums[low] = key;

sort(nums, left, low-1);

sort(nums, low+1, right);

}

}

過程分析:

4,3,5,9,2,1 low=0,high=5,key=4

1,3,5,9,2,1 ? low=2,high=5 ??1,3,5,9,2,5

low=2,high=4? 1,3,2,9,2,5 ?low=3,high=4? 1,3,2,9,9,5

low=3,high=3? 1,3,2,9,9,5 ?1,3,2,9,9,5 ??

low = key 結(jié)束,key賦值給低位:1,3,2,[4],9,5?

[1,3,2] 和[9,5]分別進(jìn)行如上操作:[1,2,3][4][5,9]

快速排序的時(shí)間主要耗費(fèi)在劃分操作上困鸥,對長度為k的區(qū)間進(jìn)行劃分嗅蔬,共需k-1次關(guān)鍵字的比較。

最壞情況是每次劃分選取的基準(zhǔn)都是當(dāng)前無序區(qū)中關(guān)鍵字最小(或最大)的記錄疾就,劃分的結(jié)果是基準(zhǔn)左邊的子區(qū)間為空(或右邊的子區(qū)間為空)澜术,而劃分所得的另一個(gè)非空的子區(qū)間中記錄數(shù)目,僅僅比劃分前的無序區(qū)中記錄個(gè)數(shù)減少一個(gè)猬腰。時(shí)間復(fù)雜度為O(n*n)

在最好情況下鸟废,每次劃分所取的基準(zhǔn)都是當(dāng)前無序區(qū)的"中值"記錄,劃分的結(jié)果是基準(zhǔn)的左漆诽、右兩個(gè)無序子區(qū)間的長度大致相等侮攀÷嘀Γ總的關(guān)鍵字比較次數(shù):O(nlgn)

盡管快速排序的最壞時(shí)間為O(n2),但就平均性能而言兰英,它是基于關(guān)鍵字比較的內(nèi)部排序算法中速度最快者撇叁,快速排序亦因此而得名。它的平均時(shí)間復(fù)雜度為O(nlgn)畦贸。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陨闹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子薄坏,更是在濱河造成了極大的恐慌趋厉,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,682評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胶坠,死亡現(xiàn)場離奇詭異君账,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)沈善,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評論 3 395
  • 文/潘曉璐 我一進(jìn)店門乡数,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闻牡,你說我怎么就攤上這事净赴。” “怎么了罩润?”我有些...
    開封第一講書人閱讀 165,083評論 0 355
  • 文/不壞的土叔 我叫張陵玖翅,是天一觀的道長。 經(jīng)常有香客問我割以,道長金度,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,763評論 1 295
  • 正文 為了忘掉前任拳球,我火速辦了婚禮审姓,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘祝峻。我一直安慰自己魔吐,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評論 6 392
  • 文/花漫 我一把揭開白布莱找。 她就那樣靜靜地躺著酬姆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奥溺。 梳的紋絲不亂的頭發(fā)上辞色,一...
    開封第一講書人閱讀 51,624評論 1 305
  • 那天,我揣著相機(jī)與錄音浮定,去河邊找鬼相满。 笑死层亿,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的立美。 我是一名探鬼主播匿又,決...
    沈念sama閱讀 40,358評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼建蹄!你這毒婦竟也來了碌更?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,261評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洞慎,失蹤者是張志新(化名)和其女友劉穎痛单,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體劲腿,經(jīng)...
    沈念sama閱讀 45,722評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡旭绒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谆棱。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片快压。...
    茶點(diǎn)故事閱讀 40,030評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖垃瞧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情坪郭,我是刑警寧澤个从,帶...
    沈念sama閱讀 35,737評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站歪沃,受9級特大地震影響嗦锐,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜沪曙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評論 3 330
  • 文/蒙蒙 一奕污、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧液走,春花似錦碳默、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巷懈,卻和暖如春该抒,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顶燕。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評論 1 270
  • 我被黑心中介騙來泰國打工凑保, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留冈爹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,237評論 3 371
  • 正文 我出身青樓欧引,卻偏偏與公主長得像犯助,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子维咸,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評論 2 355

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

  • 概述:排序有內(nèi)部排序和外部排序剂买,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大癌蓖,一次不能容納全部...
    每天刷兩次牙閱讀 3,732評論 0 15
  • 概述 排序有內(nèi)部排序和外部排序瞬哼,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大租副,一次不能容納全部...
    蟻前閱讀 5,186評論 0 52
  • 概述排序有內(nèi)部排序和外部排序坐慰,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大用僧,一次不能容納全部的...
    Luc_閱讀 2,275評論 0 35
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,258評論 0 2
  • 版權(quán)聲明:本文源自簡書tianma结胀,轉(zhuǎn)載請務(wù)必注明出處:http://www.reibang.com/p/df8a...
    tianma閱讀 4,374評論 0 3