算法排序之歸并排序和快速排序

歸并排序和快速排序用的都是分治的思想,用遞歸的編程技巧來(lái)實(shí)現(xiàn).咱們先來(lái)看歸并排序.

歸并排序

歸并排序的核心思想就是,如果要排序一個(gè)數(shù)組,我們先從中間把數(shù)組分成兩部分,分別對(duì)兩部分排序,然后把排好序的兩部分再合并.

歸并排序的代碼:

merge(A[p...r], A[p...q], A[q+1...r]) {

? var i := p,j := q+1,k := 0 // 初始化變量 i, j, k

? var tmp := new array[0...r-p] // 申請(qǐng)一個(gè)大小跟 A[p...r] 一樣的臨時(shí)數(shù)組

? while i<=q AND j<=r do {

? ? if A[i] <= A[j] {

? ? ? tmp[k++] = A[i++] // i++ 等于 i:=i+1

? ? } else {

? ? ? tmp[k++] = A[j++]

? ? }

? }


? // 判斷哪個(gè)子數(shù)組中有剩余的數(shù)據(jù)

? var start := i菇夸,end := q

? if j<=r then start := j, end:=r


? // 將剩余的數(shù)據(jù)拷貝到臨時(shí)數(shù)組 tmp

? while start <= end do {

? ? tmp[k++] = A[start++]

? }


? // 將 tmp 中的數(shù)組拷貝回 A[p...r]

? for i:=0 to r-p do {

? ? A[p+i] = tmp[i]

? }

}

歸并排序的性能分析:

1,歸并排序是穩(wěn)定的排序算法

2.歸并排序的時(shí)間復(fù)雜度非常穩(wěn)定,不管是最好情況,還是最壞情況,平均情況,時(shí)間復(fù)雜度都是O(nlogn)

3.歸并排序的空間復(fù)雜度是O(n)

快速排序

快速排序的思想:如果要排序數(shù)組中下標(biāo)從p到r的一組數(shù)據(jù),我們選擇p到r中的任意一點(diǎn)數(shù)據(jù)作為pivot(分區(qū)點(diǎn)).我們遍歷 p 到 r 之間的數(shù)據(jù)沮榜,將小于 pivot 的放到左邊贰谣,將大于 pivot 的放到右邊胀葱,將 pivot 放到中間誓禁。經(jīng)過(guò)這一步驟之后雅任,數(shù)組 p 到 r 之間數(shù)據(jù)就被分成了三個(gè)部分,前面 p 到 q-1 之間都是小于 pivot 的风范,中間是 pivot,后面的 q+1 到 r 之間是大于 pivot的

實(shí)現(xiàn)代碼:

// 快速排序沪么,A 是數(shù)組硼婿,n 表示數(shù)組的大小

quick_sort(A, n) {

? quick_sort_c(A, 0, n-1)

}

// 快速排序遞歸函數(shù),p,r 為下標(biāo)

quick_sort_c(A, p, r) {

? if p >= r then return


? q = partition(A, p, r) // 獲取分區(qū)點(diǎn)

? quick_sort_c(A, p, q-1)

? quick_sort_c(A, q+1, r)

}

如果這樣實(shí)現(xiàn)的話,空間復(fù)雜度就不是O(1),那么快排就不是原地排序算法了,如果讓他是原地排序,可以這樣.

partition(A, p, r) {

? pivot := A[r]

? i := p

? for j := p to r-1 do {

? ? if A[j] < pivot {

? ? ? swap A[i] with A[j]

? ? ? i := i+1

? ? }

? }

? swap A[i] with A[r]

? return I

歸并排序和快速排序的區(qū)別

1,快排是原地,不穩(wěn)定的排序算法,時(shí)間復(fù)雜度為O(nlogn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末成玫,一起剝皮案震驚了整個(gè)濱河市加酵,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌哭当,老刑警劉巖猪腕,帶你破解...
    沈念sama閱讀 221,430評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異钦勘,居然都是意外死亡陋葡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門彻采,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)腐缤,“玉大人,你說(shuō)我怎么就攤上這事肛响×朐粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,834評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵特笋,是天一觀的道長(zhǎng)剃浇。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么虎囚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,543評(píng)論 1 296
  • 正文 為了忘掉前任角塑,我火速辦了婚禮,結(jié)果婚禮上淘讥,老公的妹妹穿的比我還像新娘圃伶。我一直安慰自己,他們只是感情好蒲列,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,547評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布窒朋。 她就那樣靜靜地躺著,像睡著了一般蝗岖。 火紅的嫁衣襯著肌膚如雪炼邀。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 52,196評(píng)論 1 308
  • 那天剪侮,我揣著相機(jī)與錄音,去河邊找鬼洛退。 笑死瓣俯,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的兵怯。 我是一名探鬼主播彩匕,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼媒区!你這毒婦竟也來(lái)了驼仪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,671評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤袜漩,失蹤者是張志新(化名)和其女友劉穎绪爸,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體宙攻,經(jīng)...
    沈念sama閱讀 46,221評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奠货,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,303評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了座掘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片递惋。...
    茶點(diǎn)故事閱讀 40,444評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖溢陪,靈堂內(nèi)的尸體忽然破棺而出萍虽,到底是詐尸還是另有隱情,我是刑警寧澤形真,帶...
    沈念sama閱讀 36,134評(píng)論 5 350
  • 正文 年R本政府宣布杉编,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏王财。R本人自食惡果不足惜卵迂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,810評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绒净。 院中可真熱鬧见咒,春花似錦、人聲如沸挂疆。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,285評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)缤言。三九已至宝当,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間胆萧,已是汗流浹背庆揩。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,399評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留跌穗,地道東北人订晌。 一個(gè)月前我還...
    沈念sama閱讀 48,837評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蚌吸,于是被迫代替她去往敵國(guó)和親锈拨。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,455評(píng)論 2 359

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

  • 概述 排序有內(nèi)部排序和外部排序羹唠,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序奕枢,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,190評(píng)論 0 52
  • 概述:排序有內(nèi)部排序和外部排序佩微,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序缝彬,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,733評(píng)論 0 15
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,262評(píng)論 0 2
  • “一個(gè)三線城市的二流大學(xué)喊衫,不會(huì)有大風(fēng)浪” 這是秦朗常常說(shuō)的話跌造。 “社會(huì)在發(fā)展,時(shí)代要進(jìn)步族购,人學(xué)會(huì)成長(zhǎng)壳贪。歷史巨輪的慢...
    艾米斯尤閱讀 323評(píng)論 0 1