public class MainMerge {
public static void main(String[] args) {
int[] arr = {1, 4, 7, 8, 3, 6, 9, 0};
sort(arr, 0, arr.length-1);
print(arr);
}
static void sort(int[] arr, int left, int right) {
if (left == right) return;
//拆分成两半
int mid = (left + right)/2;
//左边排序
sort(arr, left, mid);
//右边排序
sort(arr, mid+1, right);
merge(arr, left,mid+1, right);
}
static void merge(int[] arr, int leftPointer, int rightPointer, int arrBound) {
int[] arrTemp = new int[arrBound-leftPointer+1];
int mid = rightPointer-1;
int i = leftPointer;
int j = rightPointer;
int k = 0;
while (i<=mid && j<=arrBound) {
if (arr[i] < arr[j]) {
arrTemp[k] = arr[i];
i++;
k++;
}else {
arrTemp[k] = arr[j];
j++;
k++;
}
}
while (i <= mid) {
arrTemp[k] = arr[i];
i++;
k++;
}
while (j <= arrBound) {
arrTemp[k] = arr[j];
j++;
k++;
// 可以简写 arrTemp[k++]
}
for (int l = 0; l < arrTemp.length; l++) {
arr[leftPointer+l] = arrTemp[l];
}
//print(arrTemp);
arr = arrTemp;
}
static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
归并排序 MergeSort
最新推荐文章于 2024-09-12 19:02:20 发布
该代码示例展示了如何使用Java实现归并排序算法。通过将数组拆分、递归排序左右子数组,然后进行中间合并,最终完成对整数组的排序操作。主要方法包括`sort`、`merge`,以及辅助的`swap`和`print`函数。
摘要由CSDN通过智能技术生成