测试排序算法速度时的奇怪行为

时间:2017-12-09 22:02:41

标签: java sorting

作为一种练习,我想比较我的Radix-,Merge-和Quicksort实现的平均速度。为此,我写了一些东西,从文件中读取整数数组,然后将其传递给三种算法。它重复排序一定次数的过程,并将算法所用的时间存储在单独的列表中。最后,它只显示每种算法的平均运行时间。

除了我希望平均时间超过10次之外,整个过程都有效。在这种情况下,Java只会吐出一个IndexOutOfBoundsException。

成功运行的输出:

Doing 10 runs...
10 runs done. Calculating average run times...
Average run time for Radixsort: 87462 ns
Average run time for Mergesort: 42679 ns
Average run time for Quicksort: 116013 ns

失败的运行输出:

Doing 11 runs...
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    at java.util.ArrayList.rangeCheck(ArrayList.java:653)
    at java.util.ArrayList.get(ArrayList.java:429)
    at sorter.Radix.sort(Radix.java:8)
    at main.LoopHelper.call(LoopHelper.java:21)
    at main.MainClass.main(MainClass.java:40)

为了更好地理解:
- 在 MainClass.java:40 它尝试运行一个帮助程序类(因为我决定使用多线程)
- 在 LoopHelper.java:21 程序尝试调用初始化辅助类时指定的排序算法
- 在 Radix.java:8 中,Radixsort实现尝试获取ArrayList的第一个数字(作为String)的长度,作为获取List中任何数字的最大长度的第一步

这是我不知道程序崩溃的原因。在两个示例运行中传递的列表完全相同(这里有10个元素),并且在第一次运行时没有问题。我甚至让Java吐出从文件中获取的列表以确认没有问题在获取列表时。

那么,有没有人知道这里会发生什么? (如果有帮助,它似乎在第11次运行中崩溃)

0 个答案:

没有答案