今天我們來記錄一下歸併排序。
歸併排序的主要思想:
將陣列分成兩半,將每一半排好序,然後分別在每一半陣列的開頭設定指標,進行比較,小的就放在輔助陣列中,該指標往下移,直到其中一邊的陣列走到頭,將剩餘的元素拷貝到輔助陣列中,返回陣列就是有序陣列。
根據master公式o(t) = ao(t/b) + o(n^d)可知,a = 2,b = 2,d = 1 。a/b = d,所以歸併排序的時間複雜度是o(n*logn)的。
public class mergesort
sortprocess(arr, 0, arr.length - 1);
}public static void sortprocess(int arr, int l, int r)
int mid = l + ((r-l) >> 1);//相當於(l + r) / 2,求中點位置
//讓左邊有序
sortprocess(arr, l, mid);
//讓右邊有序
sortprocess(arr, mid + 1, r);
//歸併過程
merge(arr, l, mid, r); }
public static void merge(int arr, int l, int mid, int r) else
} //如果有乙個指標越界了,將另一部分剩餘的元素直接拷貝到輔助陣列中
while(p1 <= mid)
while(p2 <= r)
//將輔助陣列中的元素拷貝會原陣列
for(int j = 0;j}
public static void main(string args) ;
mergesort(arr);
for (int i : arr)
}}
java資料結構與演算法學習 BF演算法
bf演算法 brute force 是一種最基本的模式匹配演算法。bf演算法的實現思想很簡單 從目標串s 的第乙個字元起和模式串t的第乙個字元進行比較,若相等,則繼續逐個比較後續字元,否則從串s的第二個字元起再重新和串t進行比較。依此類推,直至串t 中的每個字元依次和串s的乙個連續的字串行相等,則稱...
資料結構與演算法學習
我想重新學習一下資料結構與演算法,打好基礎。to measure is to know.我們用演算法複雜度t n 來表示演算法的效率,效能。t n 的取值 所有問題規模為n的問題例項中,將他們的計算成本進行總體的比較,取出最壞情況下的值。有幾點需要catch,1.演算法執行的時間,會根據程式語言,作...
資料結構與演算法 學習筆記(12) 歸併排序
菜鳥一枚,剛剛學習資料結構與演算法,為了加深理解,所以與同學們分享學習過程。今天學習的是,歸併排序!上 include void merge int arr,int l,int m,int r 合併兩個陣列 for i m i r i 右邊已排序好的 i 0 int j 0,k l while i ...