黑马程序员技术交流社区

标题: 还是冒泡法 [打印本页]

作者: 黑马刘岩    时间: 2012-12-2 14:19
标题: 还是冒泡法
for(int m=0;m<a.length-1;m++){
   
   for(int n=0;n<a.length-m-1;n++){
   
    if(a[n]>a[n+1]){
     int temp=a[n];
     a[n]=a[n+1];
     a[n+1]=temp;
    }
   }
   
  }
外层循环的m<a.length-1改为m<a.length同样可以达到排序的效果,但是二者有什么区别,这个-1是应该加还是不应该加?
作者: 李培根    时间: 2012-12-2 15:05
本帖最后由 李培根 于 2012-12-2 15:09 编辑

应该加的可以提高效率,最后一个不用和自己比的,多-1后可以少比一次的。上传个毕老师的图片给你,有图有真相。


作者: 黑马刘岩    时间: 2012-12-2 15:14
李培根 发表于 2012-12-2 15:05
应该加的可以提高效率,最后一个不用和自己比的,多-1后可以少比一次的。上传个毕老师的图片给你,有图有真 ...

灰常感谢!!!
作者: 赵学刚    时间: 2012-12-2 17:43
for(int m=0;m<a.length-1;m++){  //外层循环是控制是否把整个数组都进行了排序
   
   for(int n=0;n<a.length-m-1;n++){ //内循环用于控制字数组进行排序,-m是因为进行m次内循环就排好了m个数,没必要从头比较,把没排好序的进行比较就可以了,
                                                 //-1是为了防止数组角标越界,例如length为5当m取最小值,如果不减1的话数组最大角标a[n+1]是5,然而实际最大角标是4,这样角标就越界
   
    if(a[n]>a[n+1]){
     int temp=a[n];
     a[n]=a[n+1];
     a[n+1]=temp;
    }
   }
   
  }




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2