先初始化数组,然后用Scanner从文件中逐行读取数据并存入数组,数据是以逗号分隔的整数。根据所给的数据,对前100数据分别使用冒泡排序和Java的Qsort进行排序,并计时。
时间: 2024-09-22 17:06:57 浏览: 40
Java编程实现向文本文件中读取数据之Scanner用法示例
首先,让我们逐步完成这个任务:
1. **初始化数组**:
创建一个足够大的数组,用于存储从文件读取的整数。例如,如果你不确定文件中的数据大小,你可以创建一个固定大小的数组,如`int[] numbers = new int[100];`。
2. **读取文件**:
使用`java.util.Scanner`从文件中逐行读取数据。假设文件名为`data.txt`,你可以这样做:
```java
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public void readDataFromFile(String fileName) {
Scanner scanner = null;
try {
File file = new File(fileName);
scanner = new Scanner(file);
while (scanner.hasNextInt()) {
numbers[scannedIndex++] = scanner.nextInt();
}
} catch (FileNotFoundException e) {
System.out.println("File not found: " + fileName);
} finally {
if (scanner != null) {
scanner.close();
}
}
}
```
这里的`scannedIndex`是你需要维护的一个变量,用来跟踪当前已经读取到数组的哪个位置。
3. **数据预处理(如果数据超过100)**:
如果文件中的数据超过100个,你需要决定如何截断或选择前100个。例如,你可以检查`scannedIndex`是否小于100再添加元素。
4. **冒泡排序**:
冒泡排序算法可以这样实现:
```java
long startTime = System.nanoTime();
for (int i = 0; i < numbers.length - 1; i++) {
for (int j = 0; j < numbers.length - 1 - i; j++) {
if (numbers[j] > numbers[j + 1]) {
// Swap elements
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
long endTime = System.nanoTime();
System.out.println("Bubble sort time: " + (endTime - startTime) + " ns");
```
5. **Java内置快速排序**:
Java并没有直接提供快速排序的库,但我们可以使用第三方库如Google Guava的`SortedIntList`,或者自己实现。这里以自实现为例:
```java
public class QuickSort {
// 快速排序核心部分
public static void quickSort(int[] array, int low, int high) {
// ...
}
// 全局排序
public static void mainSort(int[] array) {
long startTime = System.nanoTime();
quickSort(array, 0, numbers.length - 1);
long endTime = System.nanoTime();
System.out.println("Quicksort time: " + (endTime - startTime) + " ns");
}
}
```
记得在`quickSort`方法里实现快速排序算法,这里省略了具体实现细节。
6. **计时**:
我们使用`System.nanoTime()`来获取开始和结束的时间戳,然后计算差值,单位通常是纳秒(ns)。
现在,你可以将这些步骤组合在一起,确保在每次运行时只处理前100个元素。别忘了在操作之前关闭`Scanner`,以释放资源。
阅读全文