A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马刘岩 中级黑马   /  2012-12-2 14:19  /  1536 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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是应该加还是不应该加?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
本帖最后由 李培根 于 2012-12-2 15:09 编辑

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

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
李培根 发表于 2012-12-2 15:05
应该加的可以提高效率,最后一个不用和自己比的,多-1后可以少比一次的。上传个毕老师的图片给你,有图有真 ...

灰常感谢!!!
回复 使用道具 举报
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;
    }
   }
   
  }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马