注释
绿色为返回
橘黄色为步骤
蓝色为指向排序方法
代码如下
public static void mergerSort(int[] array){
merge(array,0,array.length-1);
}
public static void merge(int [] array, int low ,int high ){
if(low==high){
return ;
}
int mid = (high+low)/2;
merge(array,low,mid);
merge(array,mid+1,high);
mergeHelp(array,low,mid,high);
}
public static void mergeHelp(int[] array,int low ,int mid,int high){
int s1 = low;
int s2 = mid+1;
int len = high-low+1;
int[] tmp = new int[len];
int i =0;
while(s1<=mid&&s2<=high){
if(array[s1]<array[s2]){
tmp[i++] = array[s1++];
}else {
tmp[i++] = array[s2++];
}
}
while(s1<=mid){
tmp[i++] = array[s1++];
}
while(s2<=high){
tmp[i++] = array[s2++];
}
for (int j = 0; j <tmp.length ; j++) {
array[low+j] = tmp[j];
}
}