內部排序簡單來說,就是在記憶體中存放待排序資料元素進行排序的過程。
內部排序簡單分為:插入排序,快速排序,選擇排序,歸併排序,基數排序。
一、插入排序:
時間效率:o(n2),空間效率:n(1),演算法穩定,鍊錶結構效率更高。
時間效率:o(n2),空間效率:n(1),演算法穩定,鍊錶結構無法進行「折半」。
如圖:
3、希爾(shell)排序:將相隔某個增量的兩個記錄兩兩排序,不斷縮小增量至1為止來不斷重複這個過程,先作「巨集觀」調整,再做「微觀」調整。
時間效率:o(n1.25)~o(1.6n1.25)——經驗公式(大量的實驗統計資料得出),空間效率:n(1),演算法不穩定,不容易在鍊錶上實現。
如圖:二、快速排序:
1、氣泡排序:相鄰記錄兩兩比較並交換。
時間效率:o(n2),空間效率:n(1),演算法穩定,必須是順序儲存結構。
2、快速排序:對氣泡排序的改進,在待排序元素中任取一元素作為中心,所有比它小的元素一律前放,所有比它大的元素一律後放,形成左右兩個子表,在子表中重複這一過程 至序列有序。
時間效率:o(nlog2n) —因為每趟確定的元素呈指數增加,空間效率:o(log2n)—因為演算法的遞迴性,要用到棧空間。演算法不穩定。
三、選擇排序:
1、簡單選擇排序(又稱為直接選擇排序):在待排序序列中選擇最小的乙個元素放置於序列靠前的位置,在無序序列中不斷重複這3個過程至序列有序。
時間效率:o(n2),空間效率:n(1),演算法不穩定。
2、樹型選擇排序:對n個記錄兩兩比較,選擇其中較小的,再對這些較小的兩兩比較,選出較小的,重複至找到最小元素,之後將其輸出,要找次小關鍵字只需將葉子結點中的最 小關鍵字改為「最大值」 ,然後從該葉子結點開始,重複上述步驟即可。
時間效率:o(n㏒2n),空間效率較差 。
3、堆排序:堆是一棵採用順序儲存結構的完全二叉樹,堆的根結點是關鍵字序列中的最小(或最大)值,利用堆頂記錄的關鍵字值最小(或最大)的性質,從當前待排序的記錄中依次 選取關鍵字最小(或最大)的記錄,就可以實現對資料記錄的排序。當輸出堆頂元素後,以堆中最後乙個元素替代之;然後將根結點值與左、右子樹的根結點值進行比較,並與 其中小者進行交換;重複上述操作。
時間效率:o(n㏒2n),空間效率:n(1)。
四、歸併排序:是指將兩個或兩個以上的有序序列合併成乙個有序序列。若採用線性表易於實現。
初始時,將每個記錄看成乙個單獨的有序序列,則n個待排序記錄就是n個長度為1的有序子串行,之後對所有有序子串行進行兩兩歸併,得到n/2個長度為2或1的有序子串行 ——一趟歸併;重複上述步驟 ,直到得到長度為n的有序序列為止。
五、基數排序:待補充。
資料結構之內部排序演算法總結筆記
內部排序演算法 排序的基本概念 把一組無序的資料元素按照關鍵字值遞增 或遞減 的順序重新排列。一 插入排序 思想 將序列分為 有序段 與 無序段 兩段,然後依次將 無序段 中的元素插入到 有序段 的正確位置。尋找元素應插入的位置可用 直接 和 折半 兩種方式進行查詢。對應演算法 直接插入排序 折半插...
資料結構之內部排序 快速排序
ide pycharm python版本 python3.x 演算法分類 內部排序 交換類排序 快速排序 待排序記錄序列中選取乙個記錄為樞軸,其關鍵字為k1 k 1,然後將其餘關鍵字小於k1 k 1的移到前面,大於k1 k 1的移到後面,結果是待排序記錄分為兩個子表,最後將關鍵字k1 k 1插到中間...
資料結構中內部排序總結
1 首先說乙個概念 穩定排序與非穩定排序 如果乙個序列中原來相同的元素,排序完成後,仍然保持著原來的順序,那麼就成為穩定排序,反之就是非穩定排序。2 1 快速排序 quicksort 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組...