我希望能够看到冒泡排序需要多长时间才能对数组中的所有元素进行排序。我该如何衡量时间?
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;
}
}
}
}
}
答案 0 :(得分:0)
来自Diastrophism对how do I time a methods excecution in java的回答:
始终采用传统方式:
long startTime = System.nanoTime(); methodToTime(); long endTime = System.nanoTime(); long duration = endTime - startTime;
答案 1 :(得分:0)
见How do I time a method's execution in Java? 基本上是在开始时获得时间,然后在结束时获得时间并减去。
答案 2 :(得分:0)
在您致电之前:
bubble(nums);
使用:
long time = System.nanoTime();
获取排序前的当前系统时间(以纳秒为单位)。然后在排序完成后,使用:
time =- System.nanoTime();
如果将其除以1000000000.0f
,您将获得以秒为单位的时间。但是,由于您的数组可能不够大,因此您可以显示纳秒数,因为除以1000000000.0f
可能会将其四舍五入为0
。
答案 3 :(得分: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等
答案 4 :(得分: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] + " ");
}
}