一、前言
本文總結排序中的內部排序。內部排序是指待排序列完全存放在記憶體中所進行的排序過程,適合不太大的元素序列。
二、正文
對於內排序來說,排序演算法的效能主要是受3個方面影響:
1.時間效能
排序是資料處理中經常執行的一種操作,往往屬於系統的核心部分,因此排序演算法的時間開銷是衡量其好壞的最重要的標誌。在內排序中,主要進行兩種操作:比較和移動。比較指關鍵字之間的比較,這是要做排序最起碼的操作。移動指記錄從乙個位置移動到另乙個位置,事實上,移動可以通過改為記錄的儲存方式來予以避免(這個我們在講解具體的演算法時再談)。總之,高效率的內排序演算法應該是具有盡可能少的關鍵字比較次數和盡可能少的記錄移動次數。
2.輔助空間
評價排序演算法的另乙個主要標準是執行演算法所需要的輔助儲存空間。輔助儲存空間是除了存放待排序所占用的儲存空間之外,執行演算法所需要的其他儲存空間。
3.演算法的複雜性
注意這裡指的是演算法本身的複雜度,而不是指演算法的時間複雜度。顯然演算法過於複雜也會影響排序的效能。
根據排序過程中借助的主要操作,我們把內排序分為:插入排序、交換排序、選擇排序和歸併排序。可以說,這些都是比較成熟的排序技術,已經被廣泛地應用於許許多多的程式語言或資料庫當中,甚至它們都已經封裝了關於排序演算法的實現**。因此,我們學習這些排序演算法的目的更多並不是為了去在現實中程式設計排序演算法,而是通過學習來提高我們編寫演算法的能力,以便於去解決更多複雜和靈活的應用性問題。
三、效能比較
四、應用與討論總結
1、若n較小(n<=50),則可以採用直接插入排序或者簡單選擇排序。由於直接插入排序所需的記錄移動操作較簡單選擇排序多,因而當記錄本身資訊量較大時,用簡單選擇排序較好。
2、若檔案的初始狀態已按關鍵字基本有序,則選擇直接插入或者氣泡排序為宜。
3、若n較大,則應採用時間複雜度為o(nlogn)的排序方法:快速排序、堆排序或歸併排序。快排被認為目前基於比較的內部排序法中最好的方法,當待排序的關鍵字是隨機分布時,快速排序的平均時間最短。
堆排序所需的輔助空間少於快排,並且不會出現快排可能出現的最壞情況,這兩種排序都是不穩定的。若要求排序穩定且時間複雜度為o(nlogn),則可以選擇歸排序。
4、若n很大,記錄的關鍵字位數較少且可以分解時,採用基數排序較好。
5、當記錄本身資訊量較大時,為避免耗費大量的時間移動記錄。可用鍊錶作為儲存結構。
排序演算法效能比較練習 《資料結構 演算法與應用》
一 排序演算法複雜度 排序演算法 最壞情況效能 平均效能 氣泡排序 n2 n2計數排序 n2 n2 插入排序 n2 n2 選擇排序 n2 n2 堆排序nlog n nlog n 歸併排序 nlog n nlog n 快速排序 n2 nlog n 二 三值取中快排 由於快排對有序的輸入序列比對無序輸入...
《面試之排序演算法效能比較》
效能穩定 平均時間複雜度為 o nlogn 最好時間複雜度為 o nlogn 最壞時間複雜度為 o nlogn 核心思想 1 分 只要可以分,就可以將list中的元素分成兩半,直到不能分則跳出 2 比 對於傳入兩個list,則要比較排序,則為了提高效率,輸入為有序list,3 合 對於輸入兩個有序的...
各種排序方法的效能比較
測試環境說明 win xp下,vs2008,主頻 core2 雙核2.53ghz 下面是測試的 using system using system.collections.generic using system.linq using system.text using system.collect...