归并排序的代码用Java怎么编写?
时间: 2023-09-14 09:05:45 浏览: 44
### 回答1:
归并排序的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);
}
}
public static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[arr.length];
int i = left;
int j = mid + 1;
int k = left;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
for (int l = left; l <= right; l++) {
arr[l] = temp[l];
}
}
public static void main(String[] args) {
int[] arr = {5, 3, 8, 6, 2, 7, 1, 4};
mergeSort(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + " ");
}
}
}
```
这是一个递归实现的归并排序,将数组不断分成左右两个子数组,直到子数组只有一个元素,然后将左右两个子数组合并成一个有序数组。
### 回答2:
归并排序是一种常用的排序算法,它的基本思想是将待排序的数组拆分成多个子数组,再将这些子数组不断地合并成更大的有序数组,直到整个数组有序为止。
以下是使用Java编写归并排序的代码:
```java
public class MergeSort {
public static void main(String[] args) {
int[] array = {9, 5, 7, 1, 3};
mergeSort(array, 0, array.length - 1);
System.out.println("排序结果:");
for (int num : array) {
System.out.print(num + " ");
}
}
public static void mergeSort(int[] array, int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
mergeSort(array, left, mid); // 左半部分排序
mergeSort(array, mid + 1, right); // 右半部分排序
merge(array, left, mid, right); // 合并排好序的左右两部分
}
}
public static void merge(int[] array, int left, int mid, int right) {
int[] temp = new int[right - left + 1]; // 临时数组用于存储合并结果
int i = left; // 左半部分起始位置
int j = mid + 1; // 右半部分起始位置
int k = 0; // 临时数组起始位置
while (i <= mid && j <= right) {
if (array[i] <= array[j]) {
temp[k++] = array[i++];
} else {
temp[k++] = array[j++];
}
}
while (i <= mid) {
temp[k++] = array[i++];
}
while (j <= right) {
temp[k++] = array[j++];
}
for (int m = 0; m < temp.length; m++) {
array[left + m] = temp[m];
}
}
}
```
代码中的`mergeSort`方法实现了归并排序的分割和递归调用操作,`merge`方法则用于合并两个排好序的子数组。通过不断地将数组一分为二,并排序合并,最终达到整个数组有序的目的。
### 回答3:
归并排序是一种经典的排序算法,它利用分治的思想将待排序的数组分成两个子数组,然后分别对这两个子数组进行排序,最后将两个排好序的子数组合并成一个有序的数组。下面我以Java语言为例,给出归并排序的代码:
```java
public class MergeSort {
public static void mergeSort(int[] arr) {
if (arr == null || arr.length <= 1) {
return;
}
int[] temp = new int[arr.length];
mergeSort(arr, 0, arr.length - 1, temp);
}
private static void mergeSort(int[] arr, int left, int right, int[] temp) {
if (left < right) {
int mid = (left + right) / 2;
// 分
mergeSort(arr, left, mid, temp);
mergeSort(arr, mid + 1, right, temp);
// 治
merge(arr, left, mid, right, temp);
}
}
private static void merge(int[] arr, int left, int mid, int right, int[] temp) {
int i = left;
int j = mid + 1;
int t = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[t++] = arr[i++];
} else {
temp[t++] = arr[j++];
}
}
while (i <= mid) {
temp[t++] = arr[i++];
}
while (j <= right) {
temp[t++] = arr[j++];
}
t = 0;
while (left <= right) {
arr[left++] = temp[t++];
}
}
public static void main(String[] args) {
int[] arr = {4, 2, 8, 5, 1, 9, 6};
mergeSort(arr);
for (int num : arr) {
System.out.print(num + " ");
}
}
}
```
以上代码中,`mergeSort`方法是归并排序的入口,在这个方法中调用了递归的`mergeSort`方法,将数组不断地拆分,然后调用`merge`方法合并。`merge`方法中,我们使用了双指针的方法将两个子数组合并成一个有序数组。
在`main`方法中,我们给出了一个例子,使用归并排序对一个整数数组进行排序,并输出排序结果。
这样,就完成了归并排序的Java代码编写。