merge sort 是一种采用分治策略的排序方法。其最坏时间复杂度为 O(nlgn) (对数以2为底)
可以先列出递归式,然后画递归树来证明. 也可以用master theorem (主定理)来证明.
总之,最关键的就是要列出分治过程中的递归式
merge sort的递归式为:
C++ 代码如下所示:
/* MAXN为A的长度上限 inf 是一个大整数 数组计数从0开始 */ void merge(int A[],int p,int m,int q) { int i,j,k; int L[MAXN+1], R[MAXN+1]; i = j = 0; for(k = p ; k <= m ; k ++) { L[i++] = A[k]; } for(k = m+1 ; k <= q ; k ++) { R[j++] = A[k]; } L[i] = R[j] = inf; i = j = 0; for(k = p ; k <= q ; k ++) { if(L[i] < R[j]) { A[k] = L[i++]; } else { A[k] = R[j++]; } } } void merge_sort(int A[] , int p,int q) { if(q > p) { int m=(p+q)/2; merge_sort(A,p,m); merge_sort(A,m+1,q); merge(A,p,m,q); } }