這次MATLAB演算法的主題是排序演算法(下圖),參考資料和分類方法基本都是網路上第一,比如維基百科、CSDN等。 會附上原理部分,上面也會有**,便於直觀理解,就不多說了。
1.插入排序。
.直接插入:
由於 MATLAB 中的向量長度不確定,因此寫出的 ** 看起來很簡單。 但實際上,插入排序要複雜得多。
由於二進位搜尋在MATLAB的語法中沒有找到使**簡潔的技巧,因此直接被內建的向量操作所取代。
步驟:
1. 將 a[2] 與 a[1] 進行比較,如果 a[2] 較大,則跳到下一步; 如果 a[1] 較大,則將 a[2] 放在 a[1] 之前。
2. 將 a[3] 與 a[2] 進行比較,如果 a[3] 更大,則跳到下一步; 將 a[3] 與 a[1] 進行比較,如果 a[3] 較大,則在 a[1] 和 a[2] 之間插入 a[3]; 如果 a[1] 較大,則將 a[3] 放在 a[1] 之前。
3. 將 a[4] 與 a[3] 進行比較,如果 a[4] 更大,則跳到下一步; 將 a[4] 與 a[2] 進行比較,如果 a[4] 較大,則在 a[2] 和 a[3] 之間插入 a[4]; 如果 a[2] 較大,則將 a[4] 與 a[1] 進行比較,如果 a[4] 較大,則在 a[1] 和 a[2] 之間插入 a[4]; 如果 a[1] 較大,則將 a[4] 放在 a[1] 之前。
在遍歷所有元素之前,排序完成。
例:
陣列 a=[4 2 5 3 1]。
1. 將 4 與 2 進行比較,得到 a=[2 4 5 3 1]。
2. 將 5 與 4 進行比較,得到 a=[2 4 5 3 1]。
3. 比較 3 與 5、3<5、3 與 4、3<4、33 與 2、3>2,得到 a=[2 3 4 5 1]。
4. 比較 1 與 5、1<5、1 與 4、1<4、1 與 3、1<3、1 與 2、1<2,得到 a=[1 2 3 4 5] 完成。
2.山體排序:
Hill Sort 演算法以其設計者 Donald Shell 的名字命名,於 1959 年發布,是 Insert Sort 的更高效、更改進的版本。 它不會一次做乙個。 取而代之的是,初始選擇大步幅(較大增量)間隔比較,使記錄跳到接近其排序位置; 然後增量縮小; 最終增量為1,大大減少了記錄的移動次數,提高了分揀效率。 Hill 排序對增量序列的選擇沒有嚴格的規則。 ”
與合併排序類似:
步驟:
1.取整數 d,將所有模數為 d 的記錄視為乙個組,並在每個組內插入和排序。
2.d = floor(d 2),按 d 重新組合以對插入物進行排序。
3.如果 d = 1,則重複步驟 2。
其他排序:1.雞尾酒分揀
也就是說,略微變形的氣泡分揀版本,效率更高。 視覺化將非常有趣。
步驟:
已知陣列 A 有 n 個元素。
1. 比較 a(1) 和 a(2),如果 a(1) > a(2),則將兩者互換。 (將較大的移到後面)。
2、至a(2)、a(3); a(3)、a(4)..a(n-1) 和 a(n) 來比較整個未排序的陣列。 (將最大的數字排在最後)。
3. 比較 a(n-1) 和 a(n-2),如果 a(n-1)4, a(n-2) 和 a(n-3); a(n-3)、a(n-4)..a(2) 和 a(1) 來比較整個未排序的陣列。 (將最小的數字排在最前面)。
5. 對刪除有序數字的陣列重複該操作。 直到排序完成。
例:
陣列 a=[4 2 5 7 3 1 6]。
做一次:a=[2 4 5 3 1 6 7]。
做一次:a=[1 2 4 5 3 6 7]。
重複:a=[1 2 4 3 5 6 7]。
重複:a=[1 2 3 4 5 6 7]。
2.猴子分揀
根據無限猴子定理,現在中文維基百科的**被縮短並變得有序(xyx)。
步驟:
1.重新隨機化原始陣列。
2.如果陣列未按公升序或降序排序,請重複 1。