0

我正在尝试打印由 持有的长值elapsed,有人可以帮助我了解如何做到这一点的格式吗?

这打印0.0

但我知道它有更多有效数字(可能像 .0005324 或其他东西)

System.out.println("It took " + (double)elapsed + " milliseconds to complete SELECTION_SORT algorithm.");

'

    System.currentTimeMillis();
    long start = System.currentTimeMillis();
    int sortedArr[] = selectionSort(arr1);
    long elapsed = System.currentTimeMillis() - start;


    System.out.println("\n///////////SELECTIONSort//////////////");
    System.out.println("\nSelection sort implemented below prints a sorted list:");
    print(sortedArr);
    System.out.printf("It took %.7f ms....", elapsed);

    //System.out.println("It took " + (double)elapsed + " milliseconds to complete SELECTION_SORT algorithm.");'

'

    private static int[] selectionSort(int[] arr) {

    int minIndex, tmp;
    int n = arr.length;
    for (int i = 0; i < n - 1; i++) {
        minIndex = i;
        for (int j = i + 1; j < n; j++)
            if (arr[j] < arr[minIndex])
                minIndex = j;
        if (minIndex != i) {
            tmp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = tmp;
        }
    }
    return arr;

}'
4

4 回答 4

2

更改格式不会为您提供更高的分辨率,如果您使用 7 位数字打印 1 毫秒,那么您的真正问题就是每次只得到 1.0000000。这对你一点帮助都没有。

你需要的是一个高分辨率的计时器

long start = System.nanoTime();
int sortedArr[] = selectionSort(arr1);
long elapsed = System.nanoTime() - start;

System.out.println("\n///////////SELECTIONSort//////////////");
System.out.println("\nSelection sort implemented below prints a sorted list:");
print(sortedArr);
System.out.printf("It took %.3f ms....", elapsed / 1e6);

但是,如果你这样做是在自欺欺人,因为 Java 会动态编译代码,并且运行得越多就会越快。它可以快 100 倍或更多,使您看到的第一个数字毫无用处。

通常我建议你多次运行循环并忽略前 10,000+ 次。这将极大地改变结果,以至于您会看到第一个数字完全错误。我建议你试试这个

for(int iter = 1; iter<=100000; iter *= 10) {
    long start = System.nanoTime();
    int[] sortedArr = null
    for(int i=0;i<iter;i++) 
        sortedArr = selectionSort(arr1);
    long elapsed = System.nanoTime() - start;

    System.out.println("\n///////////SELECTIONSort//////////////");
    System.out.println("\nSelection sort implemented below prints a sorted list:");
    print(sortedArr);
    System.out.printf("It took %.3f ms on average....", elapsed / 1e6 / iter);
}

你会看到你的结果提高了 10 倍甚至 100 倍,只要运行代码更长的时间。

于 2013-11-09T07:59:08.477 回答
1

您可以使用打印格式。对于 a doubleor float,要获得小数点后 7 位,您可以:

System.out.printf("It took %.7f ms....", elapsed);

编辑
您实际上使用的是 a long,而不是 a double,因此您不能有有效数字,因为long只接受整数值。

于 2013-11-09T06:33:05.570 回答
0

Along是一个整数值,没有小数位。

要获得运行时间的近似值,请在循环中运行相同的排序,例如 1000 次,然后将测量的时间除以 1000。

例如:

System.out.println("It took " + ((double)elapsed) / NUMBER_OF_ITERATONS);
于 2013-11-09T06:56:56.323 回答
0

试试这个: String.format("%.7f",longvalue); 通过使用上面的行,您可以格式化您的长数或任何浮点数。这里 7 是指在“。”之后您想要多少位数。.

于 2013-11-09T06:44:05.000 回答