黑马程序员技术交流社区

标题: 冒泡排序小问题,请高手指教. [打印本页]

作者: 井瑞涛    时间: 2013-4-21 16:46
标题: 冒泡排序小问题,请高手指教.
本帖最后由 井瑞涛 于 2013-4-22 00:04 编辑


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

作者: 肖川    时间: 2013-4-21 17:01
亲,你试着把数组改为只有两个元素你就知道怎么回事了,例如:int arr[] = {4,2}
然后你在编译运行你就知道是怎么回事了,并没有提高效率,而是一个bug,
比较特殊而已,你自己没有测试到。
作者: 殇_心。    时间: 2013-4-21 17:04
是都可以排序啊。
arr.length-2,排序不完全,比较的个数就少了一个。
本来有n个数,你现在只比较了n-1个数。
这里输出结果是正确的原因是:因为5这个数本身就是最大的,所以你懂的...  是凑巧结果对了。

作者: HM张勇    时间: 2013-4-21 17:13
楼上的两位回答已经相当到位了,数组中有2个或3个元素是,比较不完全,会出现纰漏。
作者: 晓风妮子    时间: 2013-4-21 17:29
刚才测试了一下你的程序,发现如果数组中的元素只有2个,或者3个的时候,是不能用arr.length-2来控制外圈循环的,
但是4个以上测试结果是可以的。
作者: yinbolove576    时间: 2013-4-21 22:17
兄台,我觉得吧,你能排序正确完全是“运气”,呵呵,你试试在你数组的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-8-9 14:28
arr.length是数组内的元素个数……减一代表最后一个角标位。减二的话,最后一个角标位的元素你怎么来进行比较……




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