我必须快速输入整数的用户输入文件(文件中的每一行包含一个整数)。我的快速方法工作,我已经测试过了。我无法读取文件并在同一文件中按排序顺序打印出来。我还需要计算这个过程需要多长时间。这是我到目前为止:传递给该方法的第一个参数是文件的整数数量,传递的第二个参数是文件的名称。 generateRandom()方法来自Question0类,它创建一个随机整数的文件,每个整数用一条线分隔。它需要两个参数:int和filename。它创建一个名为filename的文件,它由int整数组成。希望这一切都有道理。
编辑:这是一个正常工作的代码,但是当文件中有100万个数字时,我无法运行它。它给出了内存错误。当有10亿时,它表示数字格式。我必须运行一个包含10亿个数字的测试文件。
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Scanner;
public class QuickSort1000 {
public static void main(String[] args) throws Exception
{
int n = Integer.parseInt(args[0]);
String filePath = args[1];
Question0 genRan = new Question0();
genRan.generateRandom(n, filePath);
//rest if for quicksorting
File inFile = new File(filePath);
Scanner in = new Scanner(inFile);
int[] list = new int[n];
for(int i = 0; i < n; i++)
{
list[i] = in.nextInt();
}
in.close();
long startTime = System.nanoTime();
qSort(list, 0, list.length - 1);
long endTime = System.nanoTime();
long duration = endTime - startTime;
System.out.println("Total time: " + duration + " nanoseconds");
for(int i = 1; i < list.length; i++)
{
if(list[i - 1] > list[i])
{
throw new Exception("Not in sorted order");
}
//System.out.print(list[i]);
}
}
// TODO Auto-generated constructor stub
/**
* The main quicksort method that uses the partition method below
* @param a the input array
* @param p the first valid index of array
* @param r the last valid index of array
*/
public static void qSort(int[] a, int p, int r) {
// TODO Auto-generated method stub
if (p < r)
{
int q = Partition(a, p, r);
qSort(a, p, q - 1);
qSort(a, q + 1, r);
}
}
/**
* Partitions the array with respect to the last element in the array
* @param a the input array
* @param p the first element in the array
* @param r the last element in the array
* @return the element with which we will partition with respect to. The
* return element will be in its correct spot.
*/
private static int Partition(int[] a,int p, int r)
{
int x = a[r];
int i = p - 1;
int temp = 0;
for(int j = p; j <= r - 1; j++)
{
if(a[j] <= x)
{
i++;
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
temp = a[i+1];
a[i+1] = a[r];
a[r] = temp;
return i + 1;
}
}
答案 0 :(得分:1)
基于以下陈述,我推断OP正在询问如何在同一文件上执行IO
输入和输出。
我无法读取文件并将其打印出来 在同一个文件中订购。
hasNext()
。List
。PrintWriter
。以下是原始问题中main
的更正版本。
public static void main(String[] args) throws FileNotFoundException
{
int n = Integer.parseInt(args[0]);
String filePath = args[1];
//rest is for the quicksorting
File inFile = new File(filePath);
Scanner in = new Scanner(inFile);
int[] list = new int[n];
for(int i = 0; i < n; i++)
list[i] = in.nextInt();
in.close();
long startTime = System.currentTimeMillis();
qSort(list, 0, list.length - 1);
long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println(duration);
// Create a PrintWriter and clobber the file AFTER you have read it.
PrintWriter out = new PrintWriter(filePath);
for (int i = 0; i < n; i++) {
System.out.println(list[i]);
out.println(list[i]);
}
out.close();
}