采用分治思想,先递归分解数组,再合并数组
public void merge_sort(int[] arr, int[] temp, int start, int end){
if (start == end){
return;
}
int mid = start + (end - start) / 2;
merge_sort(arr,temp,start,mid);
merge_sort(arr,temp,mid + 1,end);
merge(arr,temp,start,mid,end);
}
public void merge(int[] arr, int[] temp, int start, int mid, int end ){
int i = start;
int j = mid + 1;
int m = start;
while (i <= mid && j <= end){
if (arr[i] < arr[j]){
temp[m] = arr[i];
m++;
i++;
}else{
temp[m] = arr[j];
m++;
j++;
}
}
if (i > mid){
while (j <= end){
temp[m] = arr[j];
m++;
j++;
}
}else{
while (i <= mid){
temp[m] = arr[i];
m++;
i++;
}
}
for (int k = start; k <= end; k++){
arr[k] = temp[k];
}
}