分组
操作数量级减少
//临时数组 以空间换时间
private static int[] assist;
//数据数组
private static int[] datas;
//初始化数据
datas = new int[]{4, 3, 2, 10, 12, 1, 5, 6, 11, 7};
System.out.println("原始数据:"+ Arrays.toString(datas));
//开始排序
sort(datas);
System.out.println(Arrays.toString(datas));
//归并排序
public static void sort(int[] array){
assist = new int[array.length];
sort(array, 0, array.length-1);
}
//递归分组
public static void sort(int[] array, int di, int hi){
if (hi <= di){
return;
}
int mid = di+(hi-di)/2;
sort(array,di, mid);
sort(array, mid+1,hi);
mergin(array, di, mid, hi);
}
//分组合并
public static void mergin(int[] array, int di, int mid, int hi){
int i=di;
int j = mid+1;
for (int n=di;n<=hi;n++){
if (i <= mid && j <= hi){
if (array[i] < array[j]){
assist[n] = array[i];
i+=1;
}else{
assist[n] = array[j];
j+=1;
}
continue;
}
if(i<=mid){
assist[n] = array[i];
i+=1;
continue;
}
if(j<=hi) {
assist[n] = array[j];
j += 1;
continue;
}
}
//将临时数组中的数据移动到数据数组中
for (int n=di;n<=hi;n++) {
datas[n] = assist[n];
}
}