Java气泡排序算法计时器问题

Java气泡排序算法计时器问题,java,algorithm,sorting,timer,Java,Algorithm,Sorting,Timer,我试图用计数器和计时器检查这个java bubblesort算法的效率。计数器工作正常,但计时器似乎考虑了用户键入要排序的数字集所需的时间。我只想让计时器计时bubblesort算法排序所需的时间。任何提示或帮助都将不胜感激:) 公共类bubsort{ 公共静态void main(字符串[]args){ 整数n,c,d,swap; 长startTimer; 扫描仪输入=新扫描仪(系统输入); System.out.println(“输入要排序的整数数”); n=in.nextInt(); int

我试图用计数器和计时器检查这个java bubblesort算法的效率。计数器工作正常,但计时器似乎考虑了用户键入要排序的数字集所需的时间。我只想让计时器计时bubblesort算法排序所需的时间。任何提示或帮助都将不胜感激:)

公共类bubsort{
公共静态void main(字符串[]args){
整数n,c,d,swap;
长startTimer;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入要排序的整数数”);
n=in.nextInt();
int数组[]=新的int[n];
int计数器=0;
System.out.println(“输入”+n+“整数”);
对于(c=0;c数组[d+1]){
交换=数组[d];
数组[d]=数组[d+1];
数组[d+1]=交换;
}
}
}
System.out.println(System.nanoTime()-startTimer+“ms”);
System.out.println(“编号排序列表”);
对于(c=0;c
将startTimer移动到嵌套循环之前,但移动到输入循环之后。然后回想一下,nanoTime给出的不是毫秒。如果需要毫秒,请使用System.currentTimeMillis()。

纳秒!=毫秒。此外,
System.nanoTime()
与墙时间无关。不要期望精确的结果。@ElliottFrisch“不要期望精确的结果”是什么意思?OP测量的是一个持续时间,这是
纳米时间的精确用例
@MarkoTopolnik我的意思是-不要期望精确和精确的纳秒计数。请参阅-“此方法提供纳秒精度,但不一定是纳秒分辨率(即值变化的频率)-除分辨率至少与currentTimeMillis()的分辨率一样好外,不作任何保证。”"这不会编译,因为
StartTimer
是在循环范围内声明的。你确定你的代码就是这样吗?PS:出于对所有神圣事物的热爱,不要以大写字母开始变量名。这实际上编译得很好,因为我使用全局变量,是的,我同意我不应该使用大写的变量名,但关于n现在我更关心的是代码的准确输出:)嗨,特蕾莎,我已经把启动计时器移到了你建议的地方,也就是我在最初的帖子中注释掉的地方,但它仍然有相同的问题。但是我想知道我是否用错误的方式编码。例如,如果我把4个数字按3 4 1 2的顺序排序,我希望每个数字都是正确的我运行程序计时器的输出应该是相同的还是我使用了错误的计时器?谢谢时间有多不同?你测量的是纳秒,所以你不能期望它们每次都完全相同。它不同。我一直使用4个整数3 4 1和2。时间从245169纳秒到376517纳秒不等,这就是为什么我感觉不一样时间不一致。为了测试,我花了一点时间输入需要排序的数字等。但到目前为止给出的代码和建议对我来说很好。请记住,您的CPU也在做其他事情。更好的测试将生成一个包含数千个整数的列表,随机或顺序,然后将它们洗牌。测试几次并进行比较,然后增加列表的大小并再次测试。这是否会增加您期望的方式?谢谢Teresa,我同意,但是我选择不生成随机数,这样我就可以进行一个更可控的实验来创建我自己的测试数据。我只是不完全理解nanoTime和currentTimeMillis是如何工作的假设每次我的结果都应该是相同的,这是可行的。但答案已经为我澄清了这一点。谢谢。
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);