归并排序与快速排序一样,适合大规模数据的排序。
归并排序的原理
对于待排序的数据,我们把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排序好的两部分合并在一起,这样整个数组就有序了。
示例图如下
归并排序的递推公式。如下
递推公式:
merge_sort(p...r) = merge ( merge_sort(p...q) , merge_sort(q+1...r) )
注意:这里一共有两个函数,merge 函数和 merge_sort 函数
终止条件:
p >= r 不用再继续分解
由递推公式,写出伪代码如下:
//归并排序算法,A是数组,n表示数组大小
merge_sort(A,n){
merge_sort_c(A,0,n-1)
}
//递归调用函数
merge_sort_c(A,p,r){
//递归终止条件
if(p>=r) then return
//取p到r之间的中间位置q
q=(p+r)/2
//分治递归
merge_sort_c(A,p,q)
merge_sort_c(A,q+1,r)
//将A[p...q] 和 A[q+1...r]合并为A[p...r]
merge(A[p...r],A[p...q],A[q+1...r])
}
其中 merge ( A[p…r] , A[p…q] , A[q+1…r