原创 16. 排序--簡單排序

排序 方法模板 void X_Sort(ElementType[] A, int N) 大多數情況下,爲簡單起見,討論從小到大的整數排序 N是正整數,表示數組的長度 前提 只討論基於比較的排序(例如通過 > = < 進行比較) 只討

原创 19. 排序--歸併排序

歸併排序 將已有序的子序列合併,得到有完全有序的序列 核心:有序子列的歸併 // LeftStart=左邊數組的起始位置,RightStart=右邊數組的起始位置,RightEnd=右邊數組的結束位置 void Merge(Element

原创 20. 排序--快速排序

快速排序 算法概述 從數組中選出一個數作爲主元,然後把數組一分爲二,左邊是小於主元的,右邊是大於主元的。重複這個過程,直到劃分的子集長度爲1 僞碼描述 void Quick_Sort(ElementType[] A, int N) {

原创 10. 樹--並查集

並查集 定義 並查集是一種樹型的數據結構,用於處理一些不相交集合(Disjoint Sets)的合併及查詢問題。常常在使用中以森林來表示。 存儲實現 邏輯結構:使用樹結構表示集合,樹的每個結點代表一個集合元素 物理結構:採用數組存儲

原创 17. 排序--希爾排序

希爾排序 希爾排序是插入排序的改進,增加了間隔排序(間隔排序算法與插入排序相似),最後進行插入排序 算法原理 定義增量序列DM>DM−1>...>D1=1 對每個Dk 進行”Dk− 間隔“排序(k=M,M−1,...,1 ) 注意:”D

原创 18. 排序--堆排序

堆排序 堆排序的前身–選擇排序 void Selection_Sort(ElementType[] A, int N) { for (int i = 0; i < N; i++) { // 從A[i]到A{N-1}

原创 15. 圖--拓撲排序

拓撲排序 定義 拓撲序:如果在圖中從V 到W 有一條有向路徑,則V 一定排在W 之前。滿足此條件的頂點序列稱爲一個拓撲序。 拓撲排序:獲得一個拓撲序的過程。 AOV(Activity On Vertex)網絡如果有合理的拓撲序,則必定是

原创 11. 圖--圖的表示

圖(Graph) 定義 表示“多對多”的關係 包含 一組頂點:通常用V(Vertex) 表示頂點集合 一組邊:通常用E(Edge) 表示邊的集合 邊是頂點對:(v,w)∈E ,其中v,w∈V 有向邊<v,w> 表示從v 指向w

原创 8. 樹--堆

堆 優先隊列(Priority Queue) 定義 特殊的“隊列”,取出元素的順序是依照元素的優先權(關鍵字)大小,而不是元素進入隊列的先後順序 如何組織優先隊列 採用數組或者鏈表實現優先隊列 數組 插入:元素總是插入尾部,Θ(1

原创 14. 圖--最小生成樹

最小生成樹 Minimum Spanning Tree 定義 是一棵樹 無迴路 V 個頂點一定有V−1 條邊 是生成樹 包含全部頂點 V−1 條邊都在圖裏 邊的權重和最小 注: 向生成樹中任加一條邊都一定構成迴路 最小生成樹存在