各位牛人们,小弟在做排序,希望计算出各种排序的时间差,从而比较排序的效率。但是在做冒泡排序(小到大)时遇到一个费解的问题。照理说完全逆序所需要的时间应该是最长的,顺序应该是时间最短的,乱序应该在前两者之间的。但是我写的代码,结果却是乱序比完全逆序时间还长。我怀疑是不是我用的方法不对,有些原理不知道。
  下面是我的代码:   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);
}谢谢~~~~~

解决方案 »

  1.   


    这是顺序:
    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;不就很简单了吗?然后再改下下面的判断,这还要我贴出来啊~