新手问题,关于排序求时间差的~

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

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);
}

谢谢~~~~~
...全文
134 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
LittleFish185 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 leehomwong 的回复:]
方法木有错,可能是和机子有关吧,原因不是很清楚
[/Quote]

刨根问底!~和机器有关,那都是有些什么关系~有知道的朋友希望可以解答一下~
LittleFish185 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 dazzlingwinter 的回复:]
兄弟,各种顺序(正序,逆序,乱序等)的冒泡排序算法各跑在独自的线程里,跑一千次,求平均值,一次两次的跑说明不了问题的~
[/Quote]


但是,我相信这个时间值总有有界的,不会偏差很大,我跑过几次,虽然没有几千次,但是还是可以看出来乱序时间明显长于逆序的。要不你跑下我的代码,看看结果?
LittleFish185 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zkfc_007 的回复:]
..乱序时间的确在中间,顺序时间 肯定比 逆序时间短。 但是乱序 的时间长短和机子问题有关。

还有你写的这个明显是乱序,你再把你的顺序和逆叙贴出来,怀疑是你写错了。
[/Quote]

这是顺序:
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;不就很简单了吗?然后再改下下面的判断,这还要我贴出来啊~
zkfc_007 2010-03-16
  • 打赏
  • 举报
回复
..乱序时间的确在中间,顺序时间 肯定比 逆序时间短。 但是乱序 的时间长短和机子问题有关。

还有你写的这个明显是乱序,你再把你的顺序和逆叙贴出来,怀疑是你写错了。
Dazzlingwinter 2010-03-16
  • 打赏
  • 举报
回复
兄弟,各种顺序(正序,逆序,乱序等)的冒泡排序算法各跑在独自的线程里,跑一千次,求平均值,一次两次的跑说明不了问题的~
24K純帥 2010-03-15
  • 打赏
  • 举报
回复
方法木有错,可能是和机子有关吧,原因不是很清楚
LittleFish185 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lanwenyao 的回复:]
晕,,,,,时间真多,研究这种问题
[/Quote]


呵呵~ 看似容易的问题不简单啊~
LittleFish185 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bearkin 的回复:]
。。。。恩有些时候顺序不重要 排序不光光是针对顺序去决定效率的 比如说有些排序方法需要频繁的交换元素 有些排序方法需要频繁的比较元素 影响速度的东西很多哦~
[/Quote]

但是我做过完全逆序的和顺序的~ 完全逆序的时间的确比顺序的时间长~ 就是乱序的时间让我费解,我认为应该是在前两者之间~
LittleFish185 2010-03-15
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hechenglong2004 的回复:]
哥们理论是对的,但是得和计算机的具体实情结合,我用你的代码执行逆序的排序,四次相同的数据,测得的数据分别是2406 1984 2000 2422.所以不能光看一次的结果。
[/Quote]

我这个是乱序的~ 你改改 做个完全逆序的和顺序的试试看~
BearKin 2010-03-15
  • 打赏
  • 举报
回复
。。。。恩有些时候顺序不重要 排序不光光是针对顺序去决定效率的 比如说有些排序方法需要频繁的交换元素 有些排序方法需要频繁的比较元素 影响速度的东西很多哦~
hecl2004 2010-03-15
  • 打赏
  • 举报
回复
哥们理论是对的,但是得和计算机的具体实情结合,我用你的代码执行逆序的排序,四次相同的数据,测得的数据分别是2406 1984 2000 2422.所以不能光看一次的结果。
lanwenyao 2010-03-15
  • 打赏
  • 举报
回复
晕,,,,,时间真多,研究这种问题
LittleFish185 2010-03-15
  • 打赏
  • 举报
回复
自己顶~

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧