归并排序
归并排序是一个比较稳定的排序,时间复杂度为O(nlogn)。关于归并排序的原理介绍网上已经有很多了,这里就不详细介绍了,主要的思想就是分而治之。
public static void start(int[] arr) {
sort(arr,0,arr.length-1);
}
public static void sort(int[] arr,int a,int b) {
if(a==b) return;
int mid=a+((b-a)>>1);
sort(arr,a,mid);
sort(arr,mid+1,b);
merge(arr,a,mid,b);
}
public static void merge(int[] arr,int a,int mid,int b) {
int[] temp = new int[b-a+1];
int i=0;
int first=a;
int last=mid+1;
while(first<=mid&&last<=b) {
temp[i++]=arr[first]>arr[last] ? arr[last++] : arr[first++];
}
while(first<=mid) {
temp[i++]=arr[first++];
}
while(last<=b) {
temp[i++]=arr[last++];
}
for(int j=0;j<b-a+1;++j) {
arr[a+j]=temp[j];
}
}
public static void main(String args[]) {
int[] a={4,1,3,2,5};
start(a);
for(int i=0;i<a.length;++i) {
System.out.println(a[i]);
}
}