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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 井瑞涛 中级黑马   /  2013-4-21 16:46  /  2188 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 井瑞涛 于 2013-4-22 00:04 编辑


看看i<arr.length-1和i<arr.length-2都可以排序,为什么呢??

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

6 个回复

倒序浏览
亲,你试着把数组改为只有两个元素你就知道怎么回事了,例如:int arr[] = {4,2}
然后你在编译运行你就知道是怎么回事了,并没有提高效率,而是一个bug,
比较特殊而已,你自己没有测试到。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
是都可以排序啊。
arr.length-2,排序不完全,比较的个数就少了一个。
本来有n个数,你现在只比较了n-1个数。
这里输出结果是正确的原因是:因为5这个数本身就是最大的,所以你懂的...  是凑巧结果对了。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼上的两位回答已经相当到位了,数组中有2个或3个元素是,比较不完全,会出现纰漏。
回复 使用道具 举报
刚才测试了一下你的程序,发现如果数组中的元素只有2个,或者3个的时候,是不能用arr.length-2来控制外圈循环的,
但是4个以上测试结果是可以的。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
兄台,我觉得吧,你能排序正确完全是“运气”,呵呵,你试试在你数组的5,的后面加个0,你觉得排序还能正确吗?
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 int[] arr ={4,3,1,2,5,0};//亲,你有没有注意到你的5后面的逗号没有接数字?
  6.                 //排序前
  7.                 printBubble(arr);
  8.                 //冒泡排序
  9.                 ArrayBubble(arr);
  10.                 //排序后
  11.                 printBubble(arr);
  12.         }
  13.         public static void ArrayBubble(int[] arr)
  14.         {
  15.                 for(int x=0;x<arr.length-1;x++)//如果你这里改成arr.length-2,你试试排序的结果能是正确的吗?
  16.                 {
  17.                         for(int y=0;y<arr.length-x-1;y++)
  18.                         {
  19.                                 if(arr[y]>arr[y+1])
  20.                                 {
  21.                                         int temp = arr[y];
  22.                                         arr[y] = arr[y+1];
  23.                                         arr[y+1] = temp;
  24.                                 }
  25.                         }
  26.                 }
  27.         }
  28.         //创建一个排序方法
  29.         public static void printBubble(int[] arr)
  30.         {
  31.                 System.out.print("[");
  32.                 for(int x=0;x<arr.length;x++)
  33.                 {
  34.                         if(x!=arr.length-1)
  35.                                 System.out.print(arr[x]+",");
  36.                         else
  37.                                 System.out.println(arr[x]+"]");
  38.                 }
  39.         }
  40. }
复制代码

点评

最好注释可以稍微再加上一些,比如哪一句或几句比较重要,就可以注释上。  发表于 2013-4-23 08:04

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
arr.length是数组内的元素个数……减一代表最后一个角标位。减二的话,最后一个角标位的元素你怎么来进行比较……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马