public class MergeSort {
public void merge(int[] arr, int low, int mid, int high) {
int temp[] = new int[arr.length];
int lpos = low, rpos = mid + 1, index = low;
// 从两个数组中取出最小的放入中间数组
while (lpos <= mid && rpos <= high) {
if (arr[lpos] < arr[rpos]) {
temp[index++] = arr[lpos++];
}
else {
temp[index++] = arr[rpos++];
}
}
System.out.println(Arrays.toString(arr));
// 剩余部分依次放入中间数组
while (lpos <= mid)
temp[index++] = arr[lpos++];
while (rpos <= high)
temp[index++] = arr[rpos++];
// 将中间数组中的内容复制回原数组
while (low < rpos) {
arr[low] = temp[low++];
}
System.out.println(Arrays.toString(temp));
System.out.println("*********************************");
}
public void sort(int[] arr, int low, int high) {
int mid;
if (low < high) {
mid = (low + high) / 2;
// 对左边数组进行递归
sort(arr, low, mid);
// 对右边数组进行递归
sort(arr, mid + 1, high);
// 合并
merge(arr, low, mid, high);
}
System.out.println("low: " + low + " high: " + high);
}
public static void main(String[] args) {
Merge m = new Merge();
int[] a = new int[] {
2, 6, 1, 95, 0, 23, 9, 7, 2
};
m.sort(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}
}
归并排序的java实现
最新推荐文章于 2023-12-11 10:45:47 发布