一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

八大排序算法的穩(wěn)定性和時(shí)間復(fù)雜度

 印度阿三17 2021-02-21

https://www.cnblogs.com/dll-ft/p/5861210.html

1、穩(wěn)定性

歸并排序、冒泡排序、插入排序?;鶖?shù)排序是穩(wěn)定的

選擇排序、快速排序、希爾排序、堆排序是不穩(wěn)定的

2、時(shí)間復(fù)雜度

最基礎(chǔ)的四個(gè)算法:冒泡、選擇、插入、快排中,快排的時(shí)間復(fù)雜度最小O(n*log2n),其他都是O(n2

排序法平均時(shí)間最差情形穩(wěn)定度額外空間備注
冒泡O(n2)    O(n2)穩(wěn)定O(1)n小時(shí)較好
選擇O(n2)O(n2)不穩(wěn)定O(1)n小時(shí)較好
插入O(n2)O(n2)穩(wěn)定O(1)大部分已排序時(shí)較好
基數(shù)O(logRB)O(logRB)穩(wěn)定O(n)

B是真數(shù)(0-9),

R是基數(shù)(個(gè)十百)

ShellO(nlogn)O(ns) 1<s<2不穩(wěn)定O(1)s是所選分組
快速O(nlogn)O(n2)不穩(wěn)定O(nlogn)n大時(shí)較好
歸并O(nlogn)O(nlogn)穩(wěn)定O(1)n大時(shí)較好
O(nlogn)O(nlogn)不穩(wěn)定O(1)n大時(shí)較好

3.排序算法的思想:

(1)冒泡排序:

是相鄰元素之間的比較和交換,兩重循環(huán)O(n2);所以,如果兩個(gè)相鄰元素相等,是不會(huì)交換的。所以它是一種穩(wěn)定的排序方法

(2)選擇排序:

每個(gè)元素都與第一個(gè)元素相比,產(chǎn)生交換,兩重循環(huán)O(n2);舉個(gè)栗子,5 8 5 2 9,第一遍之后,2會(huì)與5交換,那么原序列中兩個(gè)5的順序就被破壞了。所以不是穩(wěn)定的排序算法

(3)插入排序:

插入排序是在一個(gè)已經(jīng)有序的小序列的基礎(chǔ)上,一次插入一個(gè)元素。剛開(kāi)始這個(gè)小序列只包含第一個(gè)元素,事件復(fù)雜度O(n2)。比較是從這個(gè)小序列的末尾開(kāi)始的。想要插入的元素和小序列的最大者開(kāi)始比起,如果比它大則直接插在其后面,否則一直往前找它該插入的位置。如果遇見(jiàn)了一個(gè)和插入元素相等的,則把插入元素放在這個(gè)相等元素的后面。所以相等元素間的順序沒(méi)有改變,是穩(wěn)定的。

(4)快速排序
    快速排序有兩個(gè)方向,左邊的i下標(biāo)一直往右走,當(dāng)a[i] <= a[center_index],其中center_index是中樞元素的數(shù)組下標(biāo),一般取為數(shù)組第0個(gè)元素。而右邊的j下標(biāo)一直往左走,當(dāng)a[j] > a[center_index]。如果i和j都走不動(dòng)了,i <= j, 交換a[i]和a[j],重復(fù)上面的過(guò)程,直到i>j。 交換a[j]和a[center_index],完成一趟快速排序。在中樞元素和a[j]交換的時(shí)候,很有可能把前面的元素的穩(wěn)定性打亂,比如序列為 5 3 3 4 3 8 9 10 11, 現(xiàn)在中樞元素5和3(第5個(gè)元素,下標(biāo)從1開(kāi)始計(jì))交換就會(huì)把元素3的穩(wěn)定性打亂,所以快速排序是一個(gè)不穩(wěn)定的排序算法,不穩(wěn)定發(fā)生在中樞元素和a[j]交換的時(shí)刻。

(5)歸并排序
    歸并排序是把序列遞歸地分成短序列,遞歸出口是短序列只有1個(gè)元素(認(rèn)為直接有序)或者2個(gè)序列(1次比較和交換),然后把各個(gè)有序的段序列合并成一個(gè)有序的長(zhǎng)序列,不斷合并直到原序列全部排好序??梢园l(fā)現(xiàn),在1個(gè)或2個(gè)元素時(shí),1個(gè)元素不會(huì)交換,2個(gè)元素如果大小相等也沒(méi)有人故意交換,這不會(huì)破壞穩(wěn)定性。那么,在短的有序序列合并的過(guò)程中,穩(wěn)定是是否受到破壞?沒(méi)有,合并過(guò)程中我們可以保證如果兩個(gè)當(dāng)前元素相等時(shí),我們把處在前面的序列的元素保存在結(jié)果序列的前面,這樣就保證了穩(wěn)定性。所以,歸并排序也是穩(wěn)定的排序算法。

(6)基數(shù)排序
   基數(shù)排序是按照低位先排序,然后收集;再按照高位排序,然后再收集;依次類推,直到最高位。有時(shí)候有些屬性是有優(yōu)先級(jí)順序的,先按低優(yōu)先級(jí)排序,再按高優(yōu)先級(jí)排序,最后的次序就是高優(yōu)先級(jí)高的在前,高優(yōu)先級(jí)相同的低優(yōu)先級(jí)高的在前。基數(shù)排序基于分別排序,分別收集,所以其是穩(wěn)定的排序算法。

(7)希爾排序(shell)
    希爾排序是按照不同步長(zhǎng)對(duì)元素進(jìn)行插入排序,當(dāng)剛開(kāi)始元素很無(wú)序的時(shí)候,步長(zhǎng)最大,所以插入排序的元素個(gè)數(shù)很少,速度很快;當(dāng)元素基本有序了,步長(zhǎng)很小,插入排序?qū)τ谟行虻男蛄行屎芨?。所以,希爾排序的時(shí)間復(fù)雜度會(huì)比o(n^2)好一些。由于多次插入排序,我們知道一次插入排序是穩(wěn)定的,不會(huì)改變相同元素的相對(duì)順序,但在不同的插入排序過(guò)程中,相同的元素可能在各自的插入排序中移動(dòng),最后其穩(wěn)定性就會(huì)被打亂,所以shell排序是不穩(wěn)定的。

(8)堆排序
   我們知道堆的結(jié)構(gòu)是節(jié)點(diǎn)i的孩子為2*i和2*i 1節(jié)點(diǎn),大頂堆要求父節(jié)點(diǎn)大于等于其2個(gè)子節(jié)點(diǎn),小頂堆要求父節(jié)點(diǎn)小于等于其2個(gè)子節(jié)點(diǎn)。在一個(gè)長(zhǎng)為n的序列,堆排序的過(guò)程是從第n/2開(kāi)始和其子節(jié)點(diǎn)共3個(gè)值選擇最大(大頂堆)或者最小(小頂堆),這3個(gè)元素之間的選擇當(dāng)然不會(huì)破壞穩(wěn)定性。但當(dāng)為n/2-1, n/2-2, ...1這些個(gè)父節(jié)點(diǎn)選擇元素時(shí),就會(huì)破壞穩(wěn)定性。有可能第n/2個(gè)父節(jié)點(diǎn)交換把后面一個(gè)元素交換過(guò)去了,而第n/2-1個(gè)父節(jié)點(diǎn)把后面一個(gè)相同的元素沒(méi)有交換,那么這2個(gè)相同的元素之間的穩(wěn)定性就被破壞了。所以,堆排序不是穩(wěn)定的排序算法

來(lái)源:https://www./content-1-864801.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产精品一区二区不卡中文| 日本加勒比中文在线观看| 韩日黄片在线免费观看| 中文字幕中文字幕在线十八区| 亚洲精品黄色片中文字幕| 国产日韩欧美在线播放| 在线欧美精品二区三区| 老司机精品线观看86| 国产又粗又猛又长又黄视频| 国产精品日本女优在线观看| 国产精品免费视频久久| 亚洲一区二区精品国产av| 欧美黑人在线一区二区| 国产在线一区中文字幕| 最近日韩在线免费黄片| 欧美一级黄片免费视频| 最新69国产精品视频| 久久精品色妇熟妇丰满人妻91 | 九九九热在线免费视频| 黄男女激情一区二区三区| 成人免费高清在线一区二区| 国内自拍偷拍福利视频| 亚洲伦理中文字幕在线观看| 日本加勒比在线播放一区| 91精品视频全国免费| 亚洲性生活一区二区三区| 最近最新中文字幕免费| 好吊妞在线免费观看视频| 风韵人妻丰满熟妇老熟女av| 91香蕉国产观看免费人人| 麻豆精品在线一区二区三区| 日韩精品日韩激情日韩综合| 国产午夜精品在线免费看| 香蕉网尹人综合在线观看| 久久午夜福利精品日韩| 91插插插外国一区二区婷婷| 色综合久久超碰色婷婷| 手机在线观看亚洲中文字幕| 色婷婷人妻av毛片一区二区三区| 国产日韩欧美专区一区| 成人亚洲国产精品一区不卡 |