黑马程序员技术交流社区
标题:
冒泡排序小问题,请高手指教.
[打印本页]
作者:
井瑞涛
时间:
2013-4-21 16:46
标题:
冒泡排序小问题,请高手指教.
本帖最后由 井瑞涛 于 2013-4-22 00:04 编辑
QQ截图20130421161945.png
(38.99 KB, 下载次数: 56)
下载附件
2013-4-21 16:40 上传
看看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,你觉得排序还能正确吗?
class Demo
{
public static void main(String[] args)
{
int[] arr ={4,3,1,2,5,0};//亲,你有没有注意到你的5后面的逗号没有接数字?
//排序前
printBubble(arr);
//冒泡排序
ArrayBubble(arr);
//排序后
printBubble(arr);
}
public static void ArrayBubble(int[] arr)
{
for(int x=0;x<arr.length-1;x++)//如果你这里改成arr.length-2,你试试排序的结果能是正确的吗?
{
for(int y=0;y<arr.length-x-1;y++)
{
if(arr[y]>arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
//创建一个排序方法
public static void printBubble(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
复制代码
作者:
毋须繁华
时间:
2013-8-9 14:28
arr.length是数组内的元素个数……减一代表最后一个角标位。减二的话,最后一个角标位的元素你怎么来进行比较……
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2