归并排序的递归实现java
时间: 2024-11-07 16:09:57 浏览: 5
归并排序是一种基于分治策略的经典排序算法。它的递归实现通常涉及两个步骤:划分和合并。在Java中,你可以这样做:
```java
public class MergeSort {
public 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 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 = left;
// 将较小元素逐个添加到temp数组,并复制回原数组
while (i < n1 && j < n2) {
if (arr[left + i] <= arr[mid + 1 + j]) {
temp[k++] = arr[left + i++];
} else {
temp[k++] = arr[mid + 1 + j++];
}
}
// 处理剩余未比较的部分
while (i < n1) {
temp[k++] = arr[left + i++];
}
while (j < n2) {
temp[k++] = arr[mid + 1 + j++];
}
// 将临时数组的内容复制回原数组
for (i = left; i <= right; i++) {
arr[i] = temp[i];
}
}
// 测试函数
public static void main(String[] args) {
int[] arr = {9, 7, 5, 11, 12, 2, 14, 3, 10};
MergeSort mergeSortInstance = new MergeSort();
mergeSortInstance.mergeSort(arr, 0, arr.length - 1);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
阅读全文