二路归并排序
时间复杂度
O(n log2n)
每趟归并的时间为O(n),共需要进行 log2n 趟归并。
空间复杂度
O(n)
辅助空间为一个长度为n的数组
适用性
顺序存储、链式存储
稳定性
稳定!
代码
import java.util.Scanner;
public class MergeSort {
public static void merge(int []list,int low,int mid,int high) {
int []B=new int [list.length+1];
int i,j,k;
for(i=1;i<=high;i++) {
B[i]=list[i];
}
for(i=low,k=i,j=mid+1;i<=mid&&j<=high;k++) {
if(B[i]<=B[j]) {
list[k]=B[i++];
}else {
list[k]=B[j++];
}
}
while(i<=mid) list[k++]=B[i++];
while(j<=high) list[k++]=B[j++];
}
public static void sort(int []list,int low,int high) {
if(low<high) {
int mid=(low+high)/2;
sort(list,low,mid);
sort(list,mid+1,high);
merge(list, low, mid, high);
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int []list=new int[n+1];
for(int i=1;i<=n;i++) {
list[i]=sc.nextInt();
}
for(int i=1;i<=n;i++) {
System.out.print(list[i]+" ");
}
System.out.println();
sort(list,1,n);
for(int i=1;i<=n;i++) {
System.out.print(list[i]+" ");
}
sc.close();
}
}