【发布时间】:2014-01-16 05:20:58
【问题描述】:
我正在尝试使用计数器和计时器检查此 java 冒泡排序算法的效率。计数器工作正常,但计时器似乎考虑了用户输入要排序的数字集需要多长时间。我只希望计时器计时冒泡排序算法需要多长时间进行排序。任何提示或帮助将不胜感激:)
public class bubsort {
public static void main(String[] args) {
int n, c, d, swap;
Long startTimer;
Scanner in = new Scanner(System.in);
System.out.println("Input number of integers to sort");
n = in.nextInt();
int array[] = new int[n];
int counter = 0;
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++) {
array[c] = in.nextInt();
}
startTimer = System.nanoTime();
for (c = 0; c < (n - 1); c++) {
for (d = 0; d < n - c - 1; d++) {
counter++;
if (array[d] > array[d + 1]) {
swap = array[d];
array[d] = array[d + 1];
array[d + 1] = swap;
}
}
}
System.out.println(System.nanoTime() - startTimer + "ms");
System.out.println("Sorted list of numbers");
for (c = 0; c < n; c++) {
System.out.println(array[c]);
}
System.out.println("Counter: " + counter);
【问题讨论】:
-
纳秒!= 毫秒。此外,
System.nanoTime()与挂钟时间无关。不要期望得到准确的结果。 -
@ElliottFrisch 您所说的“不要期望得到准确的结果”是什么意思? OP 正在测量 duration,这是
nanoTime的精确用例。 -
@MarkoTopolnik 我的意思是 - 不要指望精确和准确的纳秒计数。请参阅JavaDoc 中的这一行 - “此方法提供纳秒精度,但不一定提供纳秒分辨率(即值更改的频率) - 除了分辨率至少与 currentTimeMillis 一样好( )"
-
鉴于
StartTimer是在循环范围内声明的,因此无法编译。你确定这就是你的代码吗? PS:为了所有神圣的事物的爱,不要以大写开头的变量名 -
这实际上编译得很好,因为我使用的是全局变量,是的,我同意我不应该使用大写的变量名,但现在我更关心代码的准确输出:)
标签: java algorithm sorting timer