數(shù)據(jù)結(jié)構(gòu)中排序算法-----內(nèi)部排序 總結(jié)

? ? 眾所周知,排序算法在數(shù)據(jù)結(jié)構(gòu)中是很重要的,而排序又分為內(nèi)部排序(待排序記錄存放在計算機(jī)存儲器中進(jìn)行的排序過程)和外部排序(由于待排序記錄數(shù)量大呛牲,以致內(nèi)存一次不能容納全部記錄鞍恢,在排序過程中需要對外存進(jìn)行訪問)希太。本篇文章主要描述內(nèi)部排序狼速。內(nèi)部排序可以分為(大的方面5類,小的方面8類):插入排序(直接插入排序卦停、希爾排序)向胡、選擇排序(簡單選擇排序、堆排序)惊完、交換排序(冒泡排序僵芹、快速排序)、歸并排序小槐、基數(shù)排序拇派;以下對這8類排序算法進(jìn)行一一詳細(xì)說明。


排序分類圖

注:排序算法的穩(wěn)定性定義如下--->


排序算法穩(wěn)定性定義

1凿跳、直接插入排序:

思想:首先將序列的第一個記錄看成是一個有序的子序列件豌,然后從第二個記錄開始逐個進(jìn)行插入,直至整個序列有序為止控嗜。

注意:設(shè)立哨兵茧彤,作為臨時存儲和判斷數(shù)組邊界之用。

直接插入排序圖

程序代碼:

InsertSort圖

時間復(fù)雜度:O(n^2),特別情況下疆栏, 當(dāng)所要排序的數(shù)據(jù)是有序的情況下曾掂,時間復(fù)雜度變?yōu)楦玫腛(n);

空間復(fù)雜度:O(1)惫谤;

穩(wěn)定性:穩(wěn)定



2、希爾排序:

思想:先將整個待排序記錄序列分割成若干個子序列分別進(jìn)行直接插入排序珠洗,待整個序列中的記錄“基本有序”時溜歪,再對全體記錄進(jìn)行依次直接插入排序。

注意:分割子序列是通過增量因子進(jìn)行分割的许蓖,增量因子選取時蝴猪,應(yīng)注意它除了1外沒有公因子,且最后一個增量因子必為1蛔糯。

希爾排序圖

程序代碼:

ShellSort圖

時間復(fù)雜度:O(n^1.3)---O(n^1.5)

空間復(fù)雜度:O(1)

穩(wěn)定性:不穩(wěn)定



3拯腮、簡單選擇排序:

思想:在要排序的一組數(shù)中,選出最幸响(或者最大)的一個數(shù)與第一個位置的數(shù)進(jìn)行交換动壤,然后在剩下的數(shù)中再找最小(或者最大)的與第二個位置的數(shù)交換淮逻,依次類推琼懊,直至第n-1個元素(倒數(shù)第二個數(shù))與第n個元素(最后一個數(shù))比較為止。

注意:第一趟爬早,從n個記錄中選出關(guān)鍵碼最小的記錄與第一個記錄進(jìn)行交換哼丈;第二趟,從第二個記錄開始的n-1個記錄里選出關(guān)鍵碼最小的記錄與第二個記錄進(jìn)行交換筛严;.......第i趟醉旦,從第i個記錄開始的n-i+1個記錄中選出關(guān)鍵碼最小的記錄與第i個記錄進(jìn)行交換。

簡單選擇排序圖

程序代碼:

SelectSort圖

時間復(fù)雜度:O(n^2)

空間復(fù)雜度:O(1)

穩(wěn)定性:不穩(wěn)定



4桨啃、堆排序:

思想:首先需要建立大根堆(父>子)或者小根堆(父<子)车胡,這樣就得到了最大值或者最小值(即堆頂元素),此時將堆頂元素與堆中最后一個元素進(jìn)行交換照瘾,再對最后一個元素除外的所有元素進(jìn)行大根堆或者小根堆的重新調(diào)整匈棘。這樣直到所有元素都調(diào)整完畢,就得到了一個有序序列的記錄析命。

注意:父-->子:n-->2*n+1 ,2*n+2 ;子-->父:n-->(n-1)/2

構(gòu)造大根堆(小根堆):第一次構(gòu)造大根堆(小根堆)主卫,需要從最后一顆子樹開始,從后往前多次調(diào)整鹃愤,每次調(diào)整的過程是從上往下簇搅。

第一次建堆圖


輸出一次堆頂元素并進(jìn)行堆調(diào)整圖

程序代碼:

堆調(diào)整程序圖


堆排序程圖

時間復(fù)雜度:O(nlog2^n)(log以2為底n的對數(shù))(注:一次堆調(diào)整的時間復(fù)雜度是O(log2^n))

空間復(fù)雜度:O(1)

穩(wěn)定性:不穩(wěn)定

拓:堆排序的前身是錦標(biāo)排序(樹形選擇排序),它的時間復(fù)雜度是O(nlog2^n),空間復(fù)雜度(O(n))软吐,是穩(wěn)定的馍资,但是它因為占用太多的輔助空間,所以不推薦使用,下面是錦標(biāo)排序的思想圖:

錦標(biāo)排序圖


5鸟蟹、冒泡排序:

思想:在要排序的一組數(shù)中乌妙,自上而下的對相鄰的兩個數(shù)依次進(jìn)行比較和調(diào)整,較大的數(shù)往下沉建钥,較小的數(shù)往上冒藤韵。

冒泡排序圖

程序代碼:

BubbleSort圖

時間復(fù)雜度:O(n^2)

空間復(fù)雜度:O(1)

穩(wěn)定性:穩(wěn)定

冒泡排序優(yōu)化:

優(yōu)化1


優(yōu)化2




6、快速排序:

思想:

遞歸的快速排序-->先在待排序的記錄中選擇一個數(shù)(通常是第一個數(shù)或者最后一個數(shù))作為基準(zhǔn)熊经,設(shè)立兩個指向標(biāo)記泽艘,分別指向第一個元素和最后一個元素,然后進(jìn)行第一趟劃分镐依,若最后一個數(shù)大于或等于基準(zhǔn)值匹涮,則使指向最后一個數(shù)的指向標(biāo)記向前移動;若最后一個數(shù)小于基準(zhǔn)值槐壳,則將最后一個數(shù)與第一個數(shù)進(jìn)行交換然低,此時將指向第一個數(shù)的指向標(biāo)記向前移動。則第一趟得到的記錄剛好以基準(zhǔn)值為分界線务唐,以上述同樣的方法再對分界線兩邊的部分進(jìn)行排序,基準(zhǔn)值就等于說找到了最終位置雳攘。

非遞歸的快速排序-->主要是利用棧來存儲兩個指向標(biāo)記的值,其它與遞歸的快速排序不相上下枫笛。

快速排序一次圖


快速排序整個過程圖

程序代碼:

1.遞歸的快速排序:

QuickSort digui圖

2.非遞歸的快速排序:

QuickSort nondigui圖1


QuickSort nondigui圖2

時間復(fù)雜度:O(nlog2^n)注:快速排序數(shù)據(jù)越有序吨灭,時間復(fù)雜度越大,性能越不好刑巧。

空間復(fù)雜度:O(log2^n)

穩(wěn)定性:不穩(wěn)定



7喧兄、歸并排序:

思想:將兩個(或者兩個以上)的有序表合并成一個新的有序表,即把待排序序列分為若干個子序列啊楚,每個子序列都是有序的吠冤。然后再把有序子序列合并為整體有序序列。

歸并排序圖

程序代碼:

MergeSort1圖


MergeSort2圖


MergeSort3圖

時間復(fù)雜度:O(nlog2^n)

空間復(fù)雜度:O(n)

穩(wěn)定性:穩(wěn)定



8特幔、基數(shù)排序:

思想:【低位優(yōu)先,鏈?zhǔn)疥犃小空⒆颍瑢?shù)字按位數(shù)劃分出n個關(guān)鍵字蚯斯,每次針對一個關(guān)鍵字進(jìn)行排序,然后針對排序后的序列進(jìn)行下個關(guān)鍵字的排序饵较,循環(huán)至所有關(guān)鍵字都是用過拍嵌,則排序完成。

程序代碼:建立下標(biāo)為0--9的隊列循诉,然后依次按關(guān)鍵字(低位優(yōu)先)將數(shù)據(jù)入隊横辆,然后再出隊。直至所有數(shù)據(jù)都排完茄猫。

時間復(fù)雜度:O(d*n)d代表數(shù)字的個數(shù)狈蚤,n代表要排序的數(shù)的總數(shù)

空間復(fù)雜度:O(n)

穩(wěn)定性:穩(wěn)定



排序算法時間,空間復(fù)雜度匯總:

排序算法比較圖

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?end ? ? ? ?2016 5 27


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末困肩,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子脆侮,更是在濱河造成了極大的恐慌锌畸,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件靖避,死亡現(xiàn)場離奇詭異潭枣,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)幻捏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門盆犁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人篡九,你說我怎么就攤上這事谐岁。” “怎么了瓮下?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵翰铡,是天一觀的道長。 經(jīng)常有香客問我讽坏,道長锭魔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任路呜,我火速辦了婚禮迷捧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘胀葱。我一直安慰自己漠秋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布抵屿。 她就那樣靜靜地躺著庆锦,像睡著了一般。 火紅的嫁衣襯著肌膚如雪轧葛。 梳的紋絲不亂的頭發(fā)上搂抒,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天,我揣著相機(jī)與錄音尿扯,去河邊找鬼求晶。 笑死,一個胖子當(dāng)著我的面吹牛衷笋,可吹牛的內(nèi)容都是我干的芳杏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼爵赵!你這毒婦竟也來了吝秕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤亚再,失蹤者是張志新(化名)和其女友劉穎郭膛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體氛悬,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡则剃,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了如捅。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棍现。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖镜遣,靈堂內(nèi)的尸體忽然破棺而出己肮,到底是詐尸還是另有隱情,我是刑警寧澤悲关,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布谎僻,位于F島的核電站,受9級特大地震影響寓辱,放射性物質(zhì)發(fā)生泄漏艘绍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一秫筏、第九天 我趴在偏房一處隱蔽的房頂上張望诱鞠。 院中可真熱鬧,春花似錦这敬、人聲如沸航夺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽阳掐。三九已至,卻和暖如春冷蚂,著一層夾襖步出監(jiān)牢的瞬間缭保,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工帝雇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留涮俄,地道東北人蛉拙。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓尸闸,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子吮廉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

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

  • 概述:排序有內(nèi)部排序和外部排序苞尝,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大宦芦,一次不能容納全部...
    每天刷兩次牙閱讀 3,727評論 0 15
  • 概述 排序有內(nèi)部排序和外部排序宙址,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大调卑,一次不能容納全部...
    蟻前閱讀 5,164評論 0 52
  • 概述 排序有內(nèi)部排序和外部排序抡砂,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大恬涧,一次不能容納全部...
    閑云清煙閱讀 756評論 0 6
  • 她說:“ 希望存一片好心注益,做一個好人, 愿身邊的人兒們都幸福健康溯捆〕笊Γ” 本期 我們的主人翁Bbgirl 會帶我們玩轉(zhuǎn)...
    Dumo2017閱讀 485評論 0 0
  • “咖喱的味道很微妙啤月,發(fā)明的人一定是位大師” 我把這道菜叫做是:咖喱了排骨。印度的咖喱早已不是什么名貴菜劳跃,但卻是一道...
    區(qū)塊鏈卡咩閱讀 765評論 4 51