生成数百万个随机整数,作为Java程序的输入

时间:2018-02-02 17:11:37

标签: java algorithm sorting terminal

我在Java中编写了一些排序算法,并验证了它们对小输入的正确性。现在,我想检查他们如何相互竞争,因为需要排序的元素数量达到数百万。

所以我一直在寻找一些步骤:

  1. 运行排序算法

  2. 询问用户想要排序的元素数量(我可能输入> 100万)

  3. 通过随机整数生成输入输入的大小。

  4. 我想知道第三步是如何实现的,不必自己重写排序算法。我正在使用LINUX终端来运行我的代码。

    谢谢!

1 个答案:

答案 0 :(得分:0)

有一种相当简单的方法将linux脚本的输出链接到java程序的输入。以下方法适合您

echo N | ./createInput.sh | java -cp "/srcpath/" packagePath/YourInputToAlgorithm

其中:

  1. N是要排序的元素数量
  2. createInput.sh是linux编号生成器(必须接受$ 1作为元素数量)
  3. YourInputToAlgorithm是使用扫描程序读取值然后在输入上执行排序算法的java代码
  4. 以下是用于说明该方法的非常简单的实现:

    Linux生成器:

    #!/bin/bash
    # Read the number of elements 
    read NUMBER_ELEMENTS
    # Must echo it to Java program
    echo $NUMBER_ELEMENTS
    # This implementation just creates number 1..NUMBER_ELEMENTS in reverse order
    until [  $NUMBER_ELEMENTS-lt 1 ]; do
        echo $NUMBER_ELEMENTS
        let NUMBER_ELEMENTS-=1
    done
    

    Java代码:

    public class ReadStdIn {
    
    public static void main(String[] args) {
        List<Integer> input = new ArrayList<Integer>();
        Scanner s = new Scanner(System.in);
        int numberElements = s.nextInt();
        while (numberElements > 0) {
            input.add(s.nextInt());
            numberElements--;
        }
        s.close();
        Collections.sort(input);   // Here you would call your algorithm
        System.out.println(input);
    }
    }
    

    一个例子:

    echo 5 | ./createInput.sh | java -cp "/src/" stackoverflow/ReadStdIn 
    

    按预期创建输出:

    [1, 2, 3, 4, 5]