数据结构——各排序算法的比较
1.從時(shí)間復(fù)雜度比較?
從平均時(shí)間復(fù)雜度來考慮,直接插入排序、冒泡排序、直接選擇排序是三種簡(jiǎn)單的排序方法,時(shí)間復(fù)雜度都為O(n2),而快速排序、堆排序、二路歸并排序的時(shí)間復(fù)雜度都為O(nlog2n),希爾排序的復(fù)雜度介于這兩者之間。若從最好的時(shí)間復(fù)雜度考慮,則直接插入排序和冒泡排序的時(shí)間復(fù)雜度最好,為O(n),其它的最好情形同平均情形相同。若從最壞的時(shí)間復(fù)雜度考慮,則快速排序的為O(n2),直接插入排序、冒泡排序、希爾排序同平均情形相同,但系數(shù)大約增加一倍,所以運(yùn)行速度將降低一半,最壞情形對(duì)直接選擇排序、堆排序和歸并排序影響不大.
2.從空間復(fù)雜度比較?
歸并排序的空間復(fù)雜度最大,為O(n),快速排序的空間復(fù)雜度為O(log2n),其它排序的空間復(fù)雜度為O(1)。?
3.從穩(wěn)定性比較?
直接插入排序、冒泡排序、歸并排序是穩(wěn)定的排序方法,而直接選擇排序、希爾排序、快速排序、堆排序是不穩(wěn)定的排序方法。?
4.從算法簡(jiǎn)單性比較?
直接插入排序、冒泡排序、直接選擇排序都是簡(jiǎn)單的排序方法,算法簡(jiǎn)單,易于理解,而希爾排序、快速排序、堆排序、歸并排序都是改進(jìn)型的排序方法,算法比簡(jiǎn)單排序要復(fù)雜得多,也難于理解。
迄今為止,已有的排序方法遠(yuǎn)遠(yuǎn)不止本章討論的這些方法,人們之所以熱衷于研究多種排序方法,不僅是由于排序在計(jì)算機(jī)中所處的重要地位,而且還因?yàn)椴煌姆椒ǜ饔衅鋬?yōu)缺點(diǎn),可適用于不同的場(chǎng)合。選取排序方法時(shí)需要考慮的因素有:
待排序的記錄數(shù)目n;記錄本身信息量的大小;關(guān)鍵字的結(jié)構(gòu)及分布情況;對(duì)排序穩(wěn)定性的要求;語(yǔ)言工具的條件,輔助表的大小等。依據(jù)這些因素,可得出如下幾點(diǎn)結(jié)論:
(1)若n較小(譬如n50),可采用直接插入排序或直接選。由于直接插入排序所需記錄移動(dòng)操作較直接選擇排序多,因此若記錄本身信息量較大時(shí),則選用直接選擇排序?yàn)橐恕?
(2)若文件的初始狀態(tài)已是按關(guān)鍵字基本有序,則選用直接插入排序泡排序?yàn)橐恕?
(3)若N較大,則應(yīng)根據(jù)其時(shí)間復(fù)雜度來選擇排序方法:快速排序\堆排序或歸并排序,快速排序是目前基于內(nèi)部排序的中被認(rèn)為是最好的方法,檔待排序的關(guān)鍵字是隨機(jī)時(shí),快速排序的平均時(shí)間最少,但堆排序所需的輔助空間少于快速排序,并且不會(huì)出現(xiàn)序可能出現(xiàn)的最壞情況,這兩種排序方法都是不穩(wěn)定的,若要求排序穩(wěn)定則可選用歸并排序。但本文章結(jié)合介紹的兩兩歸并排算法并不值得提倡,通常可以將它和直接排序結(jié)合在一起用。先利用直接插入排序求得的子文件,然后再兩兩歸并之。因?yàn)橹苯硬迦肱判蚴欠€(wěn)定的,所以,改進(jìn)后的歸并排序是穩(wěn)定的。
(4)前面討論的排序算法,除排序外,都是在一維數(shù)組上實(shí)現(xiàn)的,當(dāng)記錄本身信息量較大時(shí),為了避免浪費(fèi)大量時(shí)間移動(dòng)記錄,可以用鏈表作為存儲(chǔ)結(jié)構(gòu),如插入排序和歸并排序都易于在鏈表上實(shí)現(xiàn),并分別稱之為表和歸并表,但有的方法,如快速排序和堆排序,在鏈表上難于實(shí)現(xiàn),在這種情況下,可以提取關(guān)鍵字建立索引表,然后,對(duì)索引表進(jìn)行排序。然而更為簡(jiǎn)單的方法是;引入一個(gè)整形向量作為輔助表,排序前,若排序算法中要求交換,則只需交換R[I]和R[j]即可,排序結(jié)束后,向量就指示了記錄之間的順序關(guān)系.
轉(zhuǎn)載于:https://www.cnblogs.com/sheropan/p/5022437.html
總結(jié)
以上是生活随笔為你收集整理的数据结构——各排序算法的比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dubbo 教程
- 下一篇: CAD迷你看图 4.4.3 中文版 (最