算法--八大排序

排序重要性

在計算機編程的過程中柏锄,需要學習很多的算法酿箭,了解算法的設計與原理可以幫助我們提高自身的編程素養(yǎng)。學習算法最基本最常見的就是排序算法了趾娃。排序也為算法的學習與入門提供了一個很好的例子缭嫡。
排序的目的就是為了方便查找,但是為了提高計算機的運行時間和內(nèi)存占用抬闷,前人們提出并不斷改進各種各樣的排序算法妇蛀,這些算法也從不同角度展示了算法設計的重要原則和技巧。

排序算法根據(jù)不同的劃分依據(jù)有不同的劃分標準:

根據(jù)算法穩(wěn)定性可以分為穩(wěn)定(冒泡排序笤成、插入排序评架、歸并排序、基數(shù)排序)和不穩(wěn)定(選擇排序炕泳、快速排序纵诞、希爾排序、堆排序)培遵。
排序算法的穩(wěn)定性通俗地講就是能保證排序前2個相等的數(shù)其在序列的前后位置順序和排序后它們兩個的前后位置順序相同浙芙。在簡單形式化一下,如果Ai = Aj, Ai原來在位置前籽腕,排序后Ai還是要在Aj位置前嗡呼。

也可以劃分內(nèi)部排序和外部排序兩類,如下圖所示:

排序算法分類

廢話不多說皇耗,接下來依次講一下八大排序算法:

選擇排序--簡單(直接)選擇排序

時間復雜度:O(n^2)
空間復雜度:O(1)
穩(wěn)定度:非穩(wěn)定
1.從第一個位置8依次往后比較大小南窗,第一次遍歷的過程中找到最小元素0,然后將0與8交換位置;
2.從第二個位置5依次往后比較大小矾瘾,第二次遍歷的過程中找到最小元素1女轿,然后將1與5交換位置;
3.....
重復直到最后一次遍歷完成壕翩,排序過程也就完成了蛉迹。


簡單選擇排序動畫展示

選擇排序--堆排序

時間復雜度:O(nlogn)
空間復雜度:O(1)
穩(wěn)定度:非穩(wěn)定
堆排序是利用利用樹這種數(shù)據(jù)結(jié)構(gòu)所設計的一種排序算法。堆可分為兩種:大頂堆和小頂堆放妈。
大頂堆要求每個節(jié)點的值不大于其父節(jié)點(小頂堆要求每個節(jié)點的值不小于其父節(jié)點)北救。堆排序正是利用這個特性,不斷地將堆頂元素取出進行排序芜抒。這個用語言比較難講清楚珍策,大家還是看下邊的動畫理解吧:


堆排序

插入排序--直接插入排序

時間復雜度:O(n^2)
空間復雜度:O(1)
穩(wěn)定度:穩(wěn)定
1.從n個元素的首元素開始,先比較前兩個元素的大小宅倒,將較小值置于左端攘宙;
2.再將第三個元素在前兩個已經(jīng)排序好的元素之間找到其位置;
3.再將第四個元素在前三個已經(jīng)排序好的元素之間找到其位置拐迁;
4.再將第五個元素在前四個已經(jīng)排序好的元素之間找到其位置蹭劈;
....
直到最后一個元素在前n-1個已經(jīng)排序好的元素之間找到其位置,排序完成线召。
動畫如下圖所示:


直接插入排序

插入排序--希爾排序

時間復雜度:O(nlogn)
空間復雜度:O(1)
穩(wěn)定度:非穩(wěn)定
希爾排序首先將n個元素以n/2為步長劃分元素為一組铺韧,對每個小組內(nèi)的元素進行直接插入排序,然后每個小組均為有序數(shù)組缓淹,再將n個元素以n/4為步長劃分....依次循環(huán)哈打。具體步驟如下圖所示:
我們簡單處理增量序列:增量序列d = {n/2 ,n/4, n/8 .....1} n為要排序數(shù)的個數(shù)

希爾排序

交換排序--冒泡排序

平均時間復雜度:O(n^2)
空間復雜度:O(1)
穩(wěn)定度:穩(wěn)定
冒泡排序可以這樣理解:將一個長度為2的滑動窗從元素的最左向右依次滑動,每次保證窗口內(nèi)部的元素最大值在窗口的右邊讯壶,如果最大值不在右邊的話料仗,則交換窗口內(nèi)部的兩個元素位置∨羲荩滑動窗口第一次滑動完成后罢维,將元素的最大值置于最右端。依次循環(huán)完成排序丙挽。


冒泡排序

交換排序--快速排序

平均時間復雜度:O(nlogn)
空間復雜度:O(logn)~O(n)
穩(wěn)定度:非穩(wěn)定
快速排序?qū)嵸|(zhì)是對冒泡排序的改進肺孵。快速排序的過程可以與雙指針結(jié)合理解:在所有的記錄中取某一個記錄的值為標準(通常取第一個記錄鍵值為基準)颜阐,通過一趟排序?qū)⑺械脑胤譃閮蓚€部分:標準元素的左邊均為小于或等于當前標準的元素平窘,標準元素的右邊均為大于當前標準的元素。如下圖所示為第一個標準元素6從開始到完成一次快速排序的過程(在首尾共建立兩個指針指向當前的元素凳怨,其中一個指針指向標準元素6的位置瑰艘,對于左指針來說是鬼,如果指針指向的元素大于標準值,則交換兩個元素的位置紫新,右指針相反):


快速排序

歸并排序

平均時間復雜度:O(nlogn)
空間復雜度:O(n)
穩(wěn)定度:穩(wěn)定
歸并排序其實就是將n個元素先劃分為n個長度為1的組均蜜,然后進行兩兩歸并,第一次歸并結(jié)束的結(jié)果是有n/2個排序好的組芒率。再依次進行兩兩組的歸并囤耳,如此重復,直至最后形成包含n個記錄的有序文件位置偶芍。


歸并排序

基數(shù)排序

平均時間復雜度:O(d(r+n))
r代表關鍵字基數(shù)(一組數(shù)組中有幾個不同的數(shù)字)充择,d代表序列中最大值的位數(shù),n代表序列的長度
空間復雜度:O(dr+n)
穩(wěn)定度:穩(wěn)定
基數(shù)排序是按照低位先排序匪蟀,然后收集匣屡;再按照高位排序波岛,然后再收集笋敞;依次類推觉痛,直到最高位。大家直接看圖理解:

基數(shù)排序

綜上言簡意賅的介紹了每種排序方法以及其排序的過程查刻。希望可以幫助各位看官加深理解與學習键兜。

注:本文的一些動圖來自于其他網(wǎng)站凤类,也誠摯的感謝他們穗泵。
https://blog.csdn.net/donglynn/article/details/49758003
https://www.cnblogs.com/zhi-ming/p/10453124.html

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市谜疤,隨后出現(xiàn)的幾起案子佃延,更是在濱河造成了極大的恐慌,老刑警劉巖夷磕,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件履肃,死亡現(xiàn)場離奇詭異,居然都是意外死亡坐桩,警方通過查閱死者的電腦和手機尺棋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绵跷,“玉大人膘螟,你說我怎么就攤上這事∧刖郑” “怎么了荆残?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長净当。 經(jīng)常有香客問我内斯,道長蕴潦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任俘闯,我火速辦了婚禮潭苞,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘真朗。我一直安慰自己萄传,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布蜜猾。 她就那樣靜靜地躺著秀菱,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蹭睡。 梳的紋絲不亂的頭發(fā)上衍菱,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天,我揣著相機與錄音肩豁,去河邊找鬼脊串。 笑死,一個胖子當著我的面吹牛清钥,可吹牛的內(nèi)容都是我干的琼锋。 我是一名探鬼主播,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼祟昭,長吁一口氣:“原來是場噩夢啊……” “哼缕坎!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起篡悟,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤谜叹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后搬葬,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體荷腊,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年急凰,在試婚紗的時候發(fā)現(xiàn)自己被綠了女仰。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡抡锈,死狀恐怖疾忍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情企孩,我是刑警寧澤锭碳,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站勿璃,受9級特大地震影響擒抛,放射性物質(zhì)發(fā)生泄漏推汽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一歧沪、第九天 我趴在偏房一處隱蔽的房頂上張望歹撒。 院中可真熱鬧,春花似錦诊胞、人聲如沸暖夭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽迈着。三九已至,卻和暖如春邪码,著一層夾襖步出監(jiān)牢的瞬間裕菠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工闭专, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奴潘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓影钉,卻偏偏與公主長得像画髓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子平委,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348