各位牛人们,小弟在做排序,希望计算出各种排序的时间差,从而比较排序的效率。但是在做冒泡排序(小到大)时遇到一个费解的问题。照理说完全逆序所需要的时间应该是最长的,顺序应该是时间最短的,乱序应该在前两者之间的。但是我写的代码,结果却是乱序比完全逆序时间还长。我怀疑是不是我用的方法不对,有些原理不知道。
下面是我的代码: public void Bubblesort(){
int n=10000;
int a[]=new int[n]; Random b=new Random();
for(int i=0;i<n;i++){
a[i]=b.nextInt(100);
}
long t1=System.currentTimeMillis();
System.out.println(t1);
int temp;
for(int i=1;i<a.length;i++){
for(int j=0;j<a.length-1;j++){
if(a[j]>a[j+1]){
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
long t2=System.currentTimeMillis();
System.out.println(t2);
System.out.println(t2-t1);
}谢谢~~~~~
下面是我的代码: public void Bubblesort(){
int n=10000;
int a[]=new int[n]; Random b=new Random();
for(int i=0;i<n;i++){
a[i]=b.nextInt(100);
}
long t1=System.currentTimeMillis();
System.out.println(t1);
int temp;
for(int i=1;i<a.length;i++){
for(int j=0;j<a.length-1;j++){
if(a[j]>a[j+1]){
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
long t2=System.currentTimeMillis();
System.out.println(t2);
System.out.println(t2-t1);
}谢谢~~~~~
这是顺序:
public void Bubblesort(){int n=10000;
int a[]=new int[n]; for(int i=0;i<n;i++){
a[i]=i;
}long t1=System.currentTimeMillis();
System.out.println(t1);
int temp;
for(int i=1;i<a.length;i++){
for(int j=0;j<a.length-1;j++){
if(a[j]>a[j+1]){
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
long t2=System.currentTimeMillis();
System.out.println(t2);
System.out.println(t2-t1);
}这是完全逆序:
public void Bubblesort(){int n=10000;
int a[]=new int[n]; for(int i=0;i<n;i++){
a[i]=i;
}long t1=System.currentTimeMillis();
System.out.println(t1);
int temp;
for(int i=1;i<a.length;i++){
for(int j=0;j<a.length-1;j++){
if(a[j]<a[j+1]){
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
long t2=System.currentTimeMillis();
System.out.println(t2);
System.out.println(t2-t1);
}
------------------------------------------------------
这个顺序代码不应该有错,把Random去掉,直接赋a[i]=i;不就很简单了吗?然后再改下下面的判断,这还要我贴出来啊~