排序算法选择准则
(必看)選擇哪種排序算法,先參考這個網(wǎng)站查看排序速度演示https://www.toptal.com/developers/sorting-algorithms/
各種排序詳解可以參考http://sjjp.tjuci.edu.cn/sjjg/datastructure/ds/web/paixu/paixu8.1.1.1.htm
每種排序算法都各有優(yōu)缺點(diǎn)。因此,在實(shí)用時需根據(jù)不同情況適當(dāng)選用,甚至可以將多種方法結(jié)合起來使用。
選擇排序算法的依據(jù)
影響排序的因素有很多,平均時間復(fù)雜度低的算法并不一定就是最優(yōu)的。相反,有時平均時間復(fù)雜度高的算法可能更適合某些特殊情況。同時,選擇算法時還得考慮它的可讀性,以利于軟件的維護(hù)。一般而言,需要考慮的因素有以下四點(diǎn):
1.待排序的記錄數(shù)目n的大小;
2.記錄本身數(shù)據(jù)量的大小,也就是記錄中除關(guān)鍵字外的其他信息量的大小;
3.關(guān)鍵字的結(jié)構(gòu)及其分布情況;
4.對排序穩(wěn)定性的要求。
設(shè)待排序元素的個數(shù)為n.
1)當(dāng)n較大,則應(yīng)采用時間復(fù)雜度為O(nlog2n)的排序方法:快速排序、堆排序或歸并排序序。
?? 快速排序:是目前基于比較的內(nèi)部排序中被認(rèn)為是最好的方法,當(dāng)待排序的關(guān)鍵字是隨機(jī)分布時,快速排序的平均時間最短;
?????? 堆排序 :? 如果內(nèi)存空間允許且要求穩(wěn)定性的,
?????? 歸并排序:它有一定數(shù)量的數(shù)據(jù)移動,所以我們可能過與插入排序組合,先獲得一定長度的序列,然后再合并,在效率上將有所提高。
2)? 當(dāng)n較大,內(nèi)存空間允許,且要求穩(wěn)定性 =》歸并排序
3)當(dāng)n較小,可采用直接插入或直接選擇排序。
??? 直接插入排序:當(dāng)元素分布有序,直接插入排序?qū)⒋蟠鬁p少比較次數(shù)和移動記錄的次數(shù)。
??? 直接選擇排序 :元素分布有序,如果不要求穩(wěn)定性,選擇直接選擇排序
5)一般不使用或不直接使用傳統(tǒng)的冒泡排序。
6)基數(shù)排序
它是一種穩(wěn)定的排序算法,但有一定的局限性:
1、關(guān)鍵字可分解。
2、記錄的關(guān)鍵字位數(shù)較少,如果密集更好
3、如果是數(shù)字時,最好是無符號的,否則將增加相應(yīng)的映射復(fù)雜度
轉(zhuǎn)載于:https://www.cnblogs.com/xinlovedai/p/6225038.html
總結(jié)
- 上一篇: Python之路【第二篇】:Python
- 下一篇: [转载]We Recommend a S