十大排序
1.归并排序–利用了递归和辅助数组值拷贝
– 递归则是利用系统栈,记录每一个子问题的中间变量,进而得到最终的问题结果
class Solution {
public int[] sortArray(int[] nums) {
if(nums.length == 1) return nums;
process(nums, 0, nums.length-1);
return nums;
}
public void process(int[] arr, int l, int r){
if(l == r){
return;
}
int mid = l + ((r - l) >> 1);
process(arr, l, mid);
process(arr, mid+1, r);
megerSort(arr, l, mid, r);
}
public void megerSort(int[] arr, int l, int mid, int r){
int[] help = new int[r-l+1];
int i = 0;
int p1 = l;
int p2 = mid+1;
while(p1 <= mid && p2 <= r){
help[i++] = arr[p1] >= arr[p2] ? arr[p2++] : arr[p1++];
}
// p2 越界了
while(p1 <= mid){
help[i++] = arr[p1++];
}
// p1 越界了
while(p2 <= r){
help[i++] = arr[p2++];
}
// 进行值拷贝
for(int j=0; j<help.length;j++){
arr[l+j] = help[j];
}
}
}