java分治法合并排序代码
时间: 2024-10-19 16:01:58 浏览: 25
Java中的分治法合并排序是一种基于分治策略的排序算法,它将待排序数组分成两个部分,分别对这两个部分进行排序,然后再合并它们。以下是使用分治法合并排序的一个简单示例:
```java
public class MergeSort {
public static void mergeSort(int[] arr, int left, int right) {
if (left < right) {
// 找到中间位置
int mid = (left + right) / 2;
// 递归地对左半部分和右半部分进行排序
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
// 合并已排序的部分
merge(arr, left, mid, right);
}
}
private static void merge(int[] arr, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
// 创建临时数组存储两部分已排序的数据
int[] temp = new int[n1 + n2];
int i = 0, j = 0, k = 0;
// 比较左右两部分的元素并放入临时数组
while (i < n1 && j < n2) {
if (arr[left + i] <= arr[mid + j]) {
temp[k++] = arr[left + i++];
} else {
temp[k++] = arr[mid + j++];
}
}
// 如果左侧还有剩余元素,直接复制过去
while (i < n1) {
temp[k++] = arr[left + i++];
}
// 如果右侧还有剩余元素,直接复制过去
while (j < n2) {
temp[k++] = arr[mid + j++];
}
// 将临时数组的内容复制回原数组
for (i = left; i <= right; i++) {
arr[i] = temp[i - left];
}
}
// 测试方法
public static void main(String[] args) {
int[] arr = {9, 7, 5, 11, 12, 2, 14, 3};
int arrLength = arr.length;
mergeSort(arr, 0, arrLength - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
在这个例子中,`mergeSort()`函数是主递归函数,而`merge()`函数则是合并两个有序子序列的过程。当你运行`main()`方法,会看到输出的是已经按照升序排列的整数。
阅读全文