import java.util.Arrays;
public class guibing {
public static void main(String[] args) {
int[] arr = {8, 4, 5, 7, 1, 3, 6,2};
int[] temp = new int[arr.length];
Finjie(arr,0,arr.length - 1,temp);
System.out.println(Arrays.toString(arr));
}
//分解方法
public static void Finjie(int[] arr, int left, int right, int[] temp){
if (left < right){
int mid = (left + right) / 2;
//向左分解
Finjie(arr,left,mid,temp);
//向右分解
Finjie(arr,mid + 1,right,temp);
Hebing(arr,left,mid,right,temp);
}
}
//合并方法
public static void Hebing(int[] arr, int left, int mid, int right, int[] temp) {
//初始化
int l = left;
int r = mid + 1;
int t = 0;
while (l <= mid && r <= right) {
if (arr[l] <= arr[r]) {
//将l放入临时数组
temp[t] = arr[l];
t += 1;
l += 1;
} else {
//将r放入临时数组
temp[t] = arr[r];
t += 1;
r += 1;
}
}
//分别判断是否都放入了临时数组
while (l <= mid){
temp[t] = arr[l];
t += 1;
l += 1;
}
while (r <= right){
temp[t] = arr[r];
t += 1;
r += 1;
}
//拷贝临时数组
int index = 0;
int end = left;
//从left到right拷贝
while (end <= right){
System.out.println("第"+(index + 1) + "次的left为:"+left +"right为:" + right);
arr[end] = temp[index];
end += 1;
index += 1;
}
}
}
Java数据结构--归并排序
最新推荐文章于 2024-09-23 14:50:51 发布