資源描述:
《各種排序方法的比較和選擇》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。
1、按平均時間將排序分為四類:(1)平方階(O(n2))排序??? 一般稱為簡單排序,例如直接插入、直接選擇和冒泡排序;(2)線性對數階(O(nlgn))排序??? 如快速、堆和歸并排序;(3)O(n1+£)階排序??? £是介于0和1之間的常數,即0<£<1,如希爾排序;(4)線性階(O(n))排序??? 如桶、箱和基數排序。各種排序方法比較????簡單排序中直接插入最好,快速排序最快,當文件為正序時,直接插入和冒泡均最佳。影響排序效果的因素??? 因為不同的排序方法適應不同的應用環(huán)境和要求,所以選擇合適的排序方法應綜合考慮下列因素: ?、俅判虻挠涗洈的縩; ?、谟涗浀拇笮?
2、規(guī)模); ?、坳P鍵字的結構及其初始狀態(tài); ④對穩(wěn)定性的要求; ?、菡Z言工具的條件; ?、薮鎯Y構; ⑦時間和輔助空間復雜度等。不同條件下,排序方法的選擇(1)若n較小(如n≤50),可采用直接插入或直接選擇排序。??? 當記錄規(guī)模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數少于直接插人,應選直接選擇排序為宜。(2)若文件初始狀態(tài)基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜;(3)若n較大,則應采用時間復雜度為O(nlgn)的排序方法:快速排序、堆排序或歸并排序。??? 快速排序是目前基于比較的內部排序中被認為是最好的方法,當待排序的關鍵字是隨機
3、分布時,快速排序的平均時間最短;??? 堆排序所需的輔助空間少于快速排序,并且不會出現快速排序可能出現的最壞情況。這兩種排序都是不穩(wěn)定的。??? 若要求排序穩(wěn)定,則可選用歸并排序。但本章介紹的從單個記錄起進行兩兩歸并的?排序算法并不值得提倡,通??梢詫⑺椭苯硬迦肱判蚪Y合在一起使用。先利用直接插入排序求得較長的有序子文件,然后再兩兩歸并之。因為直接插入排序是穩(wěn)定的,所以改進后的歸并排序仍是穩(wěn)定的。(4)在基于比較的排序方法中,每次比較兩個關鍵字的大小之后,僅僅出現兩種可能的轉移,因此可以用一棵二叉樹來描述比較判定過程。??? 當文件的n個關鍵字隨機分布時,任何借助于"比較"的
4、排序算法,至少需要O(nlgn)的時間。??? 箱排序和基數排序只需一步就會引起m種可能的轉移,即把一個記錄裝入m個箱子之一,因此在一般情況下,箱排序和基數排序可能在O(n)時間內完成對n個記錄的排序。但是,箱排序和基數排序只適用于像字符串和整數這類有明顯結構特征的關鍵字,而當關鍵字的取值范圍屬于某個無窮集合(例如實數型關鍵字)時,無法使用箱排序和基數排序,這時只有借助于"比較"的方法來排序。??? 若n很大,記錄的關鍵字位數較少且可以分解時,采用基數排序較好。雖然桶排序對關鍵字的結構無要求,但它也只有在關鍵字是隨機分布時才能使平均時間達到線性階,否則為平方階。同時要注意,箱
5、、桶、基數這三種分配排序均假定了關鍵字若為數字時,則其值均是非負的,否則將其映射到箱(桶)號時,又要增加相應的時間。(5)有的語言(如Fortran,Cobol或Basic等)沒有提供指針及遞歸,導致實現歸并、快速(它們用遞歸實現較簡單)和基數(使用了指針)等排序算法變得復雜。此時可考慮用其它排序。(6)本章給出的排序算法,輸人數據均是存儲在一個向量中。當記錄的規(guī)模較大時,為避免耗費大量的時間去移動記錄,可以用鏈表作為存儲結構。譬如插入排序、歸并排序、基數排序都易于在鏈表上實現,使之減少記錄的移動次數。但有的排序方法,如快速排序和堆排序,在鏈表上卻難于實現,在這種情況下,可以
6、提取關鍵字建立索引表,然后對索引表進行排序。然而更為簡單的方法是:引人一個整型向量t作為輔助表,排序前令t[i]=i(0≤i