合併排序法(Merge Sorting) 合併排序法是針對已排序好的二個或二個以上的數列,經由合併方式,組合成一個大的且已排好的數列。就像是前面一開始提到的分治法概念。 他的步驟大概如: 1.將含有n個元素的序列分割成含有n/2個長度的子序列 2.排序分割後的n/4個長度的子序列 3.合併排序完成的兩子序列,成為一個長度為n的序列 範例: 用選擇排序法將下面數列做排序: 5,4,8,7,1,3,2,9 fn main() { let mut arr = vec![5, 4, 8, 7, 1, 3, 2, 9]; merge_sort(&mut arr); println!("最後排序的數列:{:?}", arr); } f... Read more 09 Sep 2023 - 3 minute read
選擇排序法(Selection Sorting) 選擇排序法是枚舉法的應用。原理是在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,再從剩餘未排序元素中繼續尋找最小(大)元素,放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。 優點在資料移動有關。當某個元素位於正確的最終位置上,他就不會移動。 演算流程: 第一次找到此樹列中最小值後與第一個元素交換。 第二次從第二個值找起,找到此數列最小值,但不包含第一個,再和第二個值交換。 第三次從第三個值找起,找到此數列最小值,但不包含第一二個,再和第三個值交換。 第四次從第四個值找起,找到此數列最小值,但不包含第一二三個,再和第四個值交換M 就完成此排序。 範例: 用選擇排序法將下面數列做排序:... Read more 08 Sep 2023 - 1 minute read
排序演算法 排序演算法是很常見的演算法,將一串不規則的數值資料依照遞增或遞減的方式重新編排。 排序(Sorting) 排序簡單來說就是將一群資料按照某一個特定規則重新安排,使其具有遞增或遞減的次序關係。用以排序的依據,稱為鍵(key),它所含的就稱為「鍵值」。鍵值資料型態有數值型態、中文字串型態及非中文字串型態。 如果鍵值為數值型態,在比較時,則直接以數值大小做為鍵值大小比較依據,但如果鍵值為中文字串,依該中文字串由左到右逐字比較,並以中文內碼的編碼順序作為鍵值大小比較依據。假設鍵值為非中文字串,則和中文字串型態的比較方式類似,以該字串由左到右逐字比較,但卻以該字串ASCII碼的編碼順序作為鍵值大小比較依據。 在排序過程,資料的移動方式可分「直接移動」和「邏輯移動」。直接移動... Read more 07 Sep 2023 - 1 minute read
作天的樹狀結構是描述節點與節點之間,而圖形結構是兩個頂點之間是否相連。在圖形中連接兩點的邊若填上加權值,這類就稱為網路。 圖形簡介 圖形理論最早是18世紀的尤拉提出的,為了解決「肯尼茲堡橋樑」,而想出來的理論,是著名的七橋理論。尤拉當時使用的方法就是圖形理論。 當時東普魯士柯尼斯堡跨普列戈利亞河,和中心有兩個小島。小島與河的兩岸有七條橋連接。在所有橋都能只走一遍的前提下,如何才能把所有的橋都走遍? 尤拉把實際的抽象問題轉化為平面上的點與線組合,每一座橋視為一條線,橋所連接的地區視為點。這樣若從某點出發後再回到這個點,這一點的線數必須是偶數,稱為偶頂點。連有奇數條線的點稱為奇數點。 尤拉的結論是,當所有頂點的分支度皆為偶數時,才能從某頂點出發,經過每一邊一次再回到起點。但在... Read more 06 Sep 2023 - 0 minute read
今天介紹資料結構中的樹狀結構,或稱樹狀圖(Tree Diagram)是一種將階層式的構造性質,以圖像方式呈現出來的方法。 樹的基本觀念 樹是由一個或多個節點(Node)組成,其中一個特定的節點稱為根節點(Root Node),以及個不同節點相互連接,形成樹狀結構。 一顆合法的樹,節點可以互相連結,但不能形成無出口的迴圈。 這就是一顆不合法的樹。 在樹狀結構的概念: 1.根節點(Root):沒有父節點的節點就是根節點 2.葉節點(Leaf):節點沒有子節點的節點即為葉節點 3.父節點(Parent):每個節點有連結的上一層節點為父節點 4.子節點(Children):每個節點有連結的下一層為子節點 5.祖先節點(Ancestor):指某節點到根節點之間所經過的... Read more 05 Sep 2023 - 1 minute read