归并排序
public void merge(int [] nums,int l1,int h1,int l2,int h2,int [] temp) {
if(l1<=h1&&l2<=h2) {
int i=l1;
int j=l2;
int index=i;
while(i<=h1&&j<=h2) {
if(nums[i]<=nums[j]) {
temp[index++]=nums[i];
i++;
}else {
temp[index++]=nums[j];
j++;
}
}
while(i<=h1) {
temp[index++]=nums[i];
i++;
}
while(j<=h2) {
temp[index++]=nums[j];
j++;
}
for(i=l1;i<=h2;i++) {
nums[i]=temp[i];
}
}
}
public void mergeSort(int [] nums,int low,int high,int [] temp) {
if(high>low) {
int middle=(low+high)/2;
mergeSort(nums,low,middle,temp);
mergeSort(nums,middle+1,high,temp);
merge(nums,low,middle,middle+1,high,temp);
}
}