黑马程序员技术交流社区

标题: 冒泡排序中的 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