我需要为 bubbleSort 函数计时,如果达到某个时间限制,该函数就会停止。我如何在 java 中做到这一点?

I need to time a bubbleSort function, which stops if a certain time limit is reached. How do i do that in java?

public static long[] bubbleSort(String[] array, long limit) {
        long startTime = System.currentTimeMillis();
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array.length - i - 1; j++) {
                if (array[j].compareTo(array[j + 1]) > 0) {
                    String temp = array[j];
                    array[j] = array[j + 1];
                    array[j + 1] = temp;
                }
                if ( System.currentTimeMillis() - startTime > limit * 10) {
                    return new long[] {0L, System.currentTimeMillis() - startTime};
                }
            }
        }
        return new long[] {1L, System.currentTimeMillis() - startTime};
    }

这是我写的代码。这不好。 这个功能太花时间了。但是如果我删除 if 块

if ( System.currentTimeMillis() - startTime > limit * 10) {
        return new long[] {0L, System.currentTimeMillis() - startTime};
}

速度快多了! 例如:对于 if 块,时间是 = Sorting time: 0 min. 0 sec. 81 ms. 没有 if 块 = Sorting time: 0 min. 0 sec. 15 ms. 如果限制为 = 4 毫秒,则函数将始终 return 而没有 运行 其完整过程。

为什么会这样?我还能做什么?

P.S.: return数组的第一个值用于检查排序是否完成。

首先,为了优化性能我们可以尝试的是移动比较,

if ( System.currentTimeMillis() - startTime > limit * 10) {
    return new long[] {0L, System.currentTimeMillis() - startTime};
}

从嵌套循环到外循环。如果数组的大小足够大,这会提供很多改进。

更好的方法是使用计时器 class 或多线程,如以下帖子中所述:

Setting Timeout in Java

How to set a Timer in Java