java归并排序,并给出实例
时间: 2023-10-19 19:04:33 浏览: 74
java 基本算法之归并排序实例代码.docx
归并排序是一种分治算法,它将一个数组分成两个子数组,然后将这两个子数组排序,最后将两个已排序的子数组合并成一个排序的数组。
以下是Java实现归并排序的代码:
```java
public class MergeSort {
public static void main(String[] args) {
int[] arr = {38, 27, 43, 3, 9, 82, 10};
mergeSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
public static void mergeSort(int[] arr, int l, int r) {
if (l < r) {
int m = (l + r) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
}
public static void merge(int[] arr, int l, int m, int r) {
int n1 = m - l + 1;
int n2 = r - m;
int[] leftArr = new int[n1];
int[] rightArr = new int[n2];
for (int i = 0; i < n1; i++) {
leftArr[i] = arr[l + i];
}
for (int i = 0; i < n2; i++) {
rightArr[i] = arr[m + 1 + i];
}
int i = 0, j = 0, k = l;
while (i < n1 && j < n2) {
if (leftArr[i] <= rightArr[j]) {
arr[k++] = leftArr[i++];
} else {
arr[k++] = rightArr[j++];
}
}
while (i < n1) {
arr[k++] = leftArr[i++];
}
while (j < n2) {
arr[k++] = rightArr[j++];
}
}
}
```
这是一个递归实现的归并排序算法。在 `mergeSort` 方法中,我们首先检查数组的长度是否大于1,如果是,则将数组分成两个子数组并递归调用 `mergeSort` 方法。在递归过程中,我们将数组分成两半,直到每个子数组都只有一个元素。然后我们调用 `merge` 方法将两个子数组合并成一个排序的数组。
在 `merge` 方法中,我们首先创建两个临时数组来保存左边和右边的元素。然后我们比较这两个数组中的元素,将较小的元素放入原数组中,最后将数组的剩余部分添加到原数组中。
以下是一个示例输出:
```
3 9 10 27 38 43 82
```
这是原始数组 {38, 27, 43, 3, 9, 82, 10} 经过归并排序后的结果。
阅读全文