时间复杂度(平均):O(n㏒₂n)
空间复杂度(平均):O(n)
稳定性:稳定
算法原理:先将原序列分割成不可划分的子序列,再将子序列两两合并排序,最终得到有序序列。
图示:
代码:
public static void merge_sort(int array[],int l,int r){
if(l<r){
int m=(l+r)>>1;
merge_sort(array,l,m);
merge_sort(array,m+1,r);
merge(array,l,m,r);
}
}
public static void merge(int array[],int l,int m,int r){
int length=r-l+1;
int tmp[]=new int[length];//临时数组
int left=l;
int right=m+1;
int index=0;
while(left<=m&&right<=r){
if(array[left]<=array[right]){
tmp[index++]=array[left++];
}else {
tmp[index++]=array[right++];
}
}
//若两个子数组不相等(某一个多一个元素)
while (left<=m){
tmp[index++]=array[left++];
}
while(right<=r){
tmp[index++]=array[right++];
}
index=0;
while(index<length){
array[l+index]=tmp[index++];
}
}