归并排序
过程:
-1.将数组划分称为两个数组,[left,(left+right)/2],[(left+right)/2+1,right]一直划分,直到条件left<right不满足,最后的数组只有一个元素
-2.将两个有序数组进行合并,合并保存在新的数组中
-3.temp数组的位置,避免创建多个数组
public class MergeSort2 {
/**
* 过程:
* 1.将数组分为两个部分,重复执行只要start<end
* 2.将两个有序数组进行排序
*/
public int[] mergeSort(int[] array,int left,int right,int[] temp) {
if(left<right) {
int mid=(left+right)/2;
mergeSort(array,left,mid,temp);
mergeSort(array,mid+1,right,temp);
merge(array,left,mid,right,temp);
}
return null;
}
public void merge(int[] array,int left,int mid,int right,int[] temp) {
int i=left;
int m=mid;
int j=mid+1;
int k=right;
int index=0;
while(i<=mid&&j<=right) {
if(array[i]<array[j]) {
temp[index++]=array[i];
i++;
}else {
temp[index++]=array[j];
j++;
}
}
while(j<=right) {
temp[index++]=array[j];
j++;
}
while(i<=mid) {
temp[index++]=array[i];
i++;
}
}
}