Java实现利用归并排序算法将读入的 n 个数从小到大排序后输出。
时间: 2023-07-07 16:43:05 浏览: 53
好的,这是一个比较经典的排序算法,下面是 Java 代码实现:
```java
import java.util.*;
public class MergeSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = sc.nextInt();
}
mergeSort(nums, 0, n - 1);
for (int num : nums) {
System.out.print(num + " ");
}
}
private static void mergeSort(int[] nums, int left, int right) {
if (left >= right) {
return;
}
int mid = (left + right) / 2;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
merge(nums, left, mid, right);
}
private static void merge(int[] nums, int left, int mid, int right) {
int[] tmp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (nums[i] <= nums[j]) {
tmp[k++] = nums[i++];
} else {
tmp[k++] = nums[j++];
}
}
while (i <= mid) {
tmp[k++] = nums[i++];
}
while (j <= right) {
tmp[k++] = nums[j++];
}
for (int p = 0; p < tmp.length; p++) {
nums[left + p] = tmp[p];
}
}
}
```
解释一下代码的实现过程:
首先,读入 n 个数存入数组 nums 中。然后,调用 mergeSort 函数对数组 nums 进行归并排序。在 mergeSort 函数中,首先判断左右端点是否在同一位置,如果是,则返回。否则,找到中间位置 mid,分别对左半部分和右半部分进行归并排序,然后合并左右两个有序序列。在 merge 函数中,定义一个临时数组 tmp,然后利用双指针 i 和 j 分别指向左右两个有序序列的起始位置,比较两个指针指向的值的大小,将较小的值存入数组 tmp 中,并将对应指针后移一位。最后,将剩余元素全部添加到 tmp 数组末尾,再将 tmp 数组中的元素复制回原数组 nums 中。
最后,遍历输出 nums 数组即可。