归并排序 稳定 平均复杂度, 最好最坏 都是O(nlgn)
public int[] mergeSort(int[] array, int sta, int end){
if(end>sta){
int mid = (sta +end)/2;
int[] arrLeft = mergeSort(array,sta,mid);
int[] arrRight = mergeSort(array,mid+1,end);
return partition(arrLeft,arrRight);
}else{
int[] result= new int[1];
result[0] = array[sta];
return result;
}
}
public int[] partition(int[] left, int[] right){
int length = left.length+ right.length;
int[] result = new int[length];
int i=0,j=0,index = 0;
while((i < left.length) &&(j < right.length)){
if(left[i] < right[j]){
result[index++] = left[i++];
}else{
result[index++] = right[j++];
}
}
if(i == left.length){
while(j < right.length){
result[index++] = right[j++];
}
}
if(j == right.length){
while(i < left.length){
result[index++] = left[i++];
}
}
return result;
}