黑马程序员技术交流社区
标题:
冒泡排序中的 x范围
[打印本页]
作者:
帅飞
时间:
2014-5-7 02:29
标题:
冒泡排序中的 x范围
本帖最后由 帅飞 于 2014-5-7 03:01 编辑
//降序排列
public static void arrjiang(int[] arr)
{
for ( int x=0;
x<arr.length
;x++ )
// x<arr.length-1 , 结果是一样的,到底哪个更规范一些???
{
for (int y=0;y<arr.length-x-1;y++ )
if (arr[y]<arr[y+1])
{
arr[y]=arr[y]^arr[y+1];
arr[y+1]=arr[y]^arr[y+1];
arr[y]=arr[y]^arr[y+1];
}
}
}
//升序排列
public static void arrsheng(int [] arr)
{
for ( int x=0;
x<arr.length
;x++ )
//x<arr.length-1,结果是一样的,到底哪个更规范一些???
{
for (int y=0;y<arr.length-x-1 ;y++ )
{
if (arr[y+1]<arr[y])
{
int temp = arr[y];
arr[y ]= arr[y+1];
arr[y+1]= temp;
}
}
}
}
//打印当前内存中的数组
public static void arrprint(int [] arr)
{
for (int x=0;x<arr.length ; x++)
{
System.out.print(arr[x]+"\t");
}
}
问题是:冒泡排序中,,关于 x<arr.length-1 还是 x<arr.length 好像结果都一样。。。
作者:
小太阳大开心
时间:
2014-5-7 03:11
结果虽然都一样,不过还是写arr.length-1吧,-1是为了避免一轮下来最后一个元素和自己比较,无意义,当然结果都是一样
作者:
646245771
时间:
2014-5-7 09:50
这个其实不是问题,不要太过于较真。虽然 x<arr.length 和x<arr.length-1 都能使代码完美运行,但是x<arr.length-1 运行的时候,要比 x<arr.length 更优化一些,因为数组中的最后一个元素没有必要跟自己再进行一次比较运算。以数组arr[2,6,9,8,4,5]为例,就按照楼主的冒泡排序为例,0角标和1角标比 ,1角标和2角标比,2角标和3角标比,3角标和4角标比,4角标和5角标比,但是最后一个5角标用跟自己再比一次吗?显然不需要,所以也就是循环要少运行一次,这样的代码更为优化一些。就这么一点区别而已。
作者:
张耀扬
时间:
2014-5-7 12:17
楼上的说的很对
作者:
时光♪微凉
时间:
2014-5-7 14:34
x<arr.length-1要好吧,多一次循环也只是浪费资源。其实 x<arr.length时,当x=arr.length-1进入到内层条件判断y<arr.length-x-1时,代入x后y<arr.length-(arr.length-1)-1,即y<0,所以也没意义啊
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2