排序是將一組「無序」的記錄序列調整為「有序」的記錄序列。分內部排序和外部排序。
內部排序:若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內部排序。【衡量內排序的效率是資料的比較次數】
外部排序:若參加排序的記錄數量很大,整個序列的排序過程不可能在記憶體中完成,則稱此類排序問題為外部排序。【衡量外排序的效率是記憶體與外存的交換次數】
內部排序的過程是乙個逐步擴大記錄的有序序列長度的過程。
穩定排序:假設在待排序的檔案中,存在兩個或兩個以上的記錄具有相同的關鍵字,在用某種排序法排序後,若這些相同關鍵字的元素的相對次序仍然不變,則這種排序方法是穩定的。其中冒泡,插入,基數,歸併屬於穩定排序,選擇,快速,希爾,歸屬於不穩定排序。(穩定:插冒歸基; 不穩定:快選堆希)
就地排序:若排序演算法所需的輔助空間並不依賴於問題的規模n,即輔助空間為o(1),則稱為就地排序。
精簡排序:對一對數字不進行兩次和兩次以上的比較。(精簡:直接插入,歸併排序)
1. 實現外部排序的兩個過程:
將整個初始檔案分為多個初始歸併段;
將初始歸併段進行歸併,直至得到乙個有序的完整檔案;
2. 時間組成:
內部排序所需要的時間
外存資訊讀寫所需要的時間 (關鍵)
m要小 —– 置換選擇排序
huffman(歸併的順序,對外存的i/o次數降到最低)
內部歸併所需要的時間
3. 為了提高整個外部排序的效率,分別從以上兩個方面對外部排序進行了優化:
在實現將初始檔案分為 m 個初始歸併段時,為了盡量減小 m 的值,採用置換-選擇排序演算法(內部使用敗者樹實現),可實現將整個初始檔案分為數量較少的長度不等的初始歸併段。
同時在將初始歸併段歸併為有序完整檔案的過程中,為了儘量減少讀寫外存的次數,採用構建最佳歸併樹的方式(哈夫曼樹實現),對初始歸併段進行歸併(敗者樹實現),而歸併的具體實現方法是採用敗者樹的方式。
4. 優化遞進順序:
二路歸併【因為硬碟的讀寫速度比記憶體要慢的多,按照以上這種方法,每個資料都從硬碟讀了三次,寫了三次,要花很多時間。考慮k路】
多路歸併【k不是越大越好,因為k越大,在內部排序需要的時間越長,效率低。考慮減少初始順串的數量m】
置換選擇演算法【可以用敗者樹和堆排序實現,得到多個長度不等的初始歸併段,如何設定它們的歸併順序,可以使得對外存的訪問次數降到最低? 考慮結合哈夫曼樹】
最佳歸併樹(置換選擇演算法+哈夫曼樹+多路歸併+敗者樹)
5 勝者樹 & 敗者樹 & 堆排序
發展歷史
相同點
首先它們三個的相同點就是在於:空間和時間複雜度都是一樣的o(n*logn)。調整一次的時間複雜度都是o(logn)的。
所以這道題用堆來做,跟用敗者樹來做並沒有本質上的演算法複雜度量級上的差別。
不同點
資料結構與演算法系列——排序(1)_概述
資料結構與演算法系列——排序(2)_直接插入排序
資料結構與演算法系列——排序(3)_折半插入排序
資料結構與演算法系列——排序(4)_shell希爾排序
資料結構與演算法系列——排序(5)_簡單選擇排序
資料結構與演算法系列——排序(6)_樹形選擇排序
資料結構與演算法系列——排序(7)_堆排序
資料結構與演算法系列——排序(8.1)_氣泡排序
資料結構與演算法系列——排序(8.2)_雞尾酒排序
資料結構與演算法系列——排序(9)_快速排序
資料結構與演算法系列——排序(10)_歸併排序
資料結構與演算法系列——排序(11)_基數排列
資料結構與演算法系列——排序(12)_計數排序
資料結構與演算法系列——排序(13)_鴿巢排序
資料結構與演算法系列——排序(14)_桶排序
資料結構與演算法系列——排序(15)_外部排序
各種排序演算法時間複雜度比較
資料結構 排序演算法系列總結
目錄 1 空間複雜度 2 穩定性 3 執行時間 4 目前預設的sort內建函式排序函式 5 六種常用排序方法 空間複雜度產生的原因有兩個 重新定義了一塊空間用於儲存資料 遞迴產生了棧空間 氣泡排序 選擇排序 堆排序和插入排序屬於原地實現排序,因此空間複雜度為常數級別 快速排序,在演算法中雖然沒有使用...
資料結構與演算法系列 排序 8 1 氣泡排序
核心思想 氣泡排序是一種典型的 交換排序 通過比較相鄰元素大小來決定是否交換位置 氣泡排序的思想 不停地比較相鄰的兩個記錄,如果相鄰的兩個記錄的次序是反序則交換,直到所有的記錄都已經排好序了 使關鍵字最小或最大的記錄如氣泡一般逐漸往上 漂浮 直至 水面 所以叫氣泡排序 比較相鄰的元素。如果第乙個比第...
資料結構與演算法系列 基數排序
基數排序與其他的排序方法 都不同,它不需要比較關鍵字的大小。演算法的時間複雜度是o n 相比於快速排序的o nlgn 從表面上看具有不小的優勢.但事實上可能有些出入,因為基數排序的n可能具有比較大的係數k.因此在具體的應用中,應首先對這個排序函式的效率進行評估.它是根據關鍵字中各位的值,通過對排序的...