* 歸併排序:時間複雜度t(n) = a*t(n/b) + o(n^d)
* log(b,a) = d=1 --> 複雜度為o(n^d * logn) -->o(n*logn)
* 空間複雜度o(n)
* 穩定性:不會交換相同數的位置,是乙個穩定方法
話不多說,直接上**:
public class mergesort
// 獲取中點 mid= l + (r-l)/2 防止下標溢位
int mid =(l+r)/2;
// 對左半部分進行歸併:分解
mergesort(arr,l,mid);
// 對右半部分進行歸併:分解
mergesort(arr,mid+1,r);
// 呼叫真正的排序方法:合併
sort(arr,l,mid,r);
} public static void sort(int arr,int l,int mid,int r)
// 如果p不滿足條件,說明q已經執行完畢,只剩下p對應的陣列,直接將剩下的進行賦值
while(p<=mid)
// 如果p不滿足條件,說明q已經執行完畢,只剩下p對應的陣列,直接將剩下的進行賦值
while(q<=r)
// 將結果放到最後的陣列中。
for(int i=0;i<=help.length-1;i++)
}public static void main(string args) ;
// 呼叫方法
mergesort(arr,0,arr.length-1);
for (int i : arr)
}}
具體執行過程如下圖所示:注意遞迴的跳轉
遞迴完全鋪開的示意圖如下
資料結構排序 歸併排序
歸併排序是建立在歸併操作上的一種有效的排序演算法,時間複雜度是o nlogn 它過程為 比較a i 和a j 的大小,若a i a j 則將第乙個有序表中的元素a i 複製到r k 中,並令i和k分別加上1 否則將第二個有序表中的元素a j 複製到r k 中,並令j和k分別加上1,如此迴圈下去,直到...
資料結構 歸併排序
排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...
資料結構 歸併排序
歸併排序,即merge sort,通過遞迴式的merge操作 merge即歸併 實現排序。演算法思想是分治思想 divide and conquer 歸併排序一般是遞迴實現的 時間複雜度o nlgn 遞迴都是一去一回,去的時候divide,回的時候conquer。表達欠提煉 1 divide,分 遞...