1

我希望能够看到冒泡排序对数组中的所有元素进行排序需要多长时间。我如何测量时间?

public class Bubble {
    static int[] nums = {5, 4, 3, 2, 1}; 

    public static void main(String[] args) {
        bubble(nums);
        for(int i=0; i<nums.length; i++){
            System.out.print(nums[i] + " ");
        }
    }

    // bubble sort
    public static void bubble(int[] unsorted){
        int temp;
        boolean sorted = false;
        int length = unsorted.length;

        while(!sorted){
            sorted = true;

            for(int i=0; i<length-1; i++){
                if(unsorted[i] > unsorted[i+1]){
                    temp = unsorted[i];
                    unsorted[i] = unsorted[i+1];
                    unsorted[i+1] = temp;
                    sorted = false;
                }
            }
        }
    }
}
4

5 回答 5

0

从 Diastrophism 对我如何在 java 中执行方法的时间的回答:

总是有老式的方法:

long startTime = System.nanoTime();
methodToTime();
long endTime = System.nanoTime();

long duration = endTime - startTime;
于 2013-04-19T19:52:16.353 回答
0

请参阅如何在 Java 中为方法的执行计时? 基本上得到开始的时间,然后是结束的时间并减去。

于 2013-04-19T19:53:13.090 回答
0

在你打电话之前:

bubble(nums);

利用:

long time = System.nanoTime();

获取排序前的当前系统时间(以纳秒为单位)。然后在排序完成后,使用:

time =- System.nanoTime();

如果将其除以1000000000.0f,您将获得以秒为单位的时间。但是,由于您的数组可能不够大,您可以改为显示纳秒,因为除以1000000000.0f可能会导致它被四舍五入为0.

于 2013-04-19T19:53:42.153 回答
0

您可以使用此代码:

public static void main(String[] args) {
    long t1 = System.nanoTime();
    bubble(nums);
    for(int i=0; i<nums.length; i++){
        System.out.print(nums[i] + " ");
    }
    long t = (System.nanoTime() - t1) / 1000000;
    System.out.println("Elapsed time = " + t + " ms");

}

它将显示 0ms。这是因为你的数组太小了。尝试更多的项目。复杂度为 O(n²)。

编辑:您可以使用 nanoTime 而无需划分,但我们的计算机无法测量短于 1 毫秒的时间。所以测量是不正确的。更好地测量更多元素 1000、2000、3000 等

于 2013-04-19T19:54:46.443 回答
0
public static void main(String[] args) {
   Date startTime = new Date();
   bubble(nums);
   System.out.println(new Date().getTime() - startTime.getTime());
   for(int i=0; i<nums.length; i++){
       System.out.print(nums[i] + " ");
   }
}
于 2013-04-19T19:54:52.743 回答