为什么我会选择相同的时间进行选择和冒泡排序。我所有的排序方法都正常工作,但我得到了确切的时间进行冒泡和选择排序..
import java.util.Scanner;
public class sorting{
public static void selectionsort(double[] list, int a, int b, double temp, int length){
double min;
int index=0;
/*for(int p=0;p<list.length;p++){
System.out.println("input="+list[p]);
}*/
int n=0;
int status=0;
while(n<length){
min=list[n];
for(int j=n;j<(length-1);j++){
if(list[j+1]<min){
min=list[j+1];
index=(j+1);
status=1;
}
}
if(min!=list[n]){
temp=list[n];
//System.out.println("Original val="+temp);
//System.out.println("Before n="+n);
list[n]=min;
//System.out.println("After n="+n);
//System.out.println("switch val="+list[n]);
list[index]=temp;
//System.out.println("new switch val at="+index);
n++;
//System.out.println("Updated");
/*for(int k=0;k<list.length;k++){
System.out.println("Output="+list[k]);
}*/
}
else
n++;
}
//System.out.println("Done selection:");
/*for(int k=0;k<list.length;k++){
System.out.println("Output="+list[k]);
}*/
}
public static void bubblesort(double[] list, int a, int b, double temp, double length){
/*for(int p=0;p<list.length;p++){
System.out.println("inputb="+list[p]);
}*/
while(length>=0){
for(int k=0;k<=(length-2);k++){
if(list[k]>list[k+1]){
temp=list[k+1];
list[k+1]=list[k];
list[k]=temp;
}
}
length--;
}
//System.out.println("Done bubble:");
/*for(int k=0;k<list.length;k++){
System.out.println("Outputb="+list[k]);
}*/
}
public static void main(String[] args){
Scanner in=new Scanner(System.in);
System.out.println("Lower bound");
int a=in.nextInt();
System.out.println("High bound");
int b=in.nextInt();
System.out.println("how many elements?");
int n=in.nextInt();
double[] list=new double[n];
double[] sel=new double[n];
double[] bub=new double[n];
for(int i=0;i<list.length;i++){//intializes the array
list[i]=((Math.random()*(b-a)))+a;
}
for(int h=0;h<sel.length;h++){//selection
sel[h]=list[h];
}
for(int l=0;l<bub.length;l++){//bubble
bub[l]=list[l];
}
double temp=0.0;
int length=list.length;
long startTime = System.nanoTime();
selectionsort(sel,a,b,temp,length);
long duration = System.nanoTime() - startTime;
System.out.println("Time for selection="+(duration*1.0E-9));
long startTime1 = System.nanoTime();
bubblesort(bub,a,b,temp,length);
long duration1 = System.nanoTime() - startTime1;
System.out.println("Time for bubble="+(duration*1.0E-9));
}
}
答案 0 :(得分:3)
因为您要重复打印duration
两次,所以在第二次打印中,您应该使用duration1
。
此外,正如鲍里斯在评论部分写道:那不是做基准测试的方式。更好地使用基准测试框架,该框架将负责预热JVM并多次运行两种方法以查找平均运行时间和等等。