1.实现合并排序算法。要排序的整型数组元素可以用随机数生成器生成,运行程序,分别记录对十万,一百万,五千万,一千万个数据排序所用的时间,列出表格显示统计出来的时间。并单独显示一个100个数据的排序结果。java语言生成
时间: 2025-01-02 09:45:09 浏览: 52
实现合并排序算法的基本步骤如下:
1. **分割**:将待排序数组递归地分成两半,直到每个子数组只有一个元素。
2. **合并**:将两个已排序的子数组合并成一个有序数组。这是通过比较两个子数组的第一个元素,并选择较小的一个放入新的数组,然后移动指向未选元素的指针,直到其中一个子数组完全遍历完。
以下是使用Java编写合并排序算法,包括时间记录部分以及处理不同规模数据的情况:
```java
import java.util.Arrays;
import java.util.Random;
public class MergeSort {
private static long startTime;
public static void mergeSort(int[] arr) {
if (arr.length <= 1) {
return;
}
int mid = arr.length / 2;
int[] left = Arrays.copyOfRange(arr, 0, mid);
int[] right = Arrays.copyOfRange(arr, mid, arr.length);
startTime = System.nanoTime(); // 开始计时
mergeSort(left);
mergeSort(right);
merge(arr, left, right);
}
private static void merge(int[] arr, int[] left, int[] right) {
int i = 0, j = 0, k = 0;
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
while (i < left.length) {
arr[k++] = left[i++];
}
while (j < right.length) {
arr[k++] = right[j++];
}
}
public static void main(String[] args) {
Random rand = new Random();
int dataCount;
long[] timeResults = new long[4]; // 存储不同规模的数据排序时间
for (int size = 10000; size < 50000000; size *= 10) {
dataCount = size;
int[] arr = new int[dataCount];
for (int i = 0; i < dataCount; i++) {
arr[i] = rand.nextInt(dataCount); // 使用随机数填充数组
}
startTime = System.nanoTime();
mergeSort(arr);
timeResults[size / 1000000 - 1] += System.nanoTime() - startTime; // 记录时间
System.out.println("Sorted array of " + size + " elements:");
printArray(arr);
}
// 打印时间表
System.out.println("\nTime taken (in nanoseconds) for different scales:");
for (int i = 0; i < timeResults.length; i++) {
System.out.printf("%d million elements: %.2f ns%n", (i+1)*100, timeResults[i]);
}
}
private static void printArray(int[] arr) {
System.out.println(Arrays.toString(arr));
}
}
```
运行这个程序会输出排序后的数组和对应大小数据的时间消耗。请注意,实际运行时需要考虑系统性能差异,这里只是示例代码。
阅读全文
相关推荐





