归并排序
其基本思想是:对于两个有序序列(集合),将其融合在一起得到一个新的有序序列,又被称为二路归并。
因此,归并排序的过程就是:首先将一个待排序列不断划分,划分为原来的一半,直至子序列只有一个元素为止,此时,每一个子序列只有一个元素,也就是每个子序列都是有序的。这个过程被称为分。再将子序列对应融合,按照一定的大小顺序合并在一起,最终得到有序序列,这个过程被称为合。
归并排序是分治法的经典问题。
归并排序算法的时间复杂度为O(nlogn):分的过程为logn,合的过程为n。
伪代码
MERGE(A,p,q,r)
n1=q-p+1;
n2=r-q;
create new arrays L[n1+1] and R[n2+1]
for i=0 to n1-1
L[i]=A[p+i]
for j=0 to n2-1
R[j]=A[q+1+j]
L[n1]=1000//假设1000是无穷大
R[n2]=1000
i=j=0
for k=p to r
if(L[i]<=R[j])
A[k]=L[i]
i=i+1