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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 完美恋爱 高级黑马   /  2013-10-26 15:55  /  1067 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 完美恋爱 于 2013-10-26 18:48 编辑

class Demo
{
        public static void sort(int[] arr)
        {
                for(int x = 0; x < arr.length; x++)
                {
                        for(int y = x+1; y < arr.length-1; y++)
                        {
                                int num = 0;
                                if(arr[x] > arr[y])
                                {
                                        num = arr[y];
                                        arr[y] = arr[x];
                                        arr[x] = num;
                                }
                        }
                }
        }
        
        public static void array(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]+"]");
                }
        }
        
        public static void main(String[] args)
        {
                int[] arr = {3,1,4,7,5,2,6};
               
                array(arr);
                sort(arr);
                array(arr);
        }
}

请问为什么排完序结果不是[3,1,4,7,5,2,6]
                                          [1,2,3,4,5,6,7]
                                   而是[3,1,4,7,5,2,6]
                                          [1,2,3,4,5,7,6]
这是怎会回事啊?

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
Y_Y 中级黑马 2013-10-26 16:11:24
沙发
是不是里面的for循环的条件:  for(int y = x+1; y < arr.length-1; y++)  不该减一!
回复 使用道具 举报
正确代码如下:
class Demo {
        public static void sort(int[] arr) {
                for (int x = 0; x < arr.length - 1; x++) {
                        for (int y = x + 1; y < arr.length; y++) {
                                int num = 0;
                                if (arr[x] > arr[y]) {
                                        num = arr[y];
                                        arr[y] = arr[x];
                                        arr[x] = num;
                                }
                        }
                }
        }

        public static void array(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] + "]");
                }
        }
        public static void main(String[] args) {
                int[] arr = { 3, 1, 4, 7, 5, 2, 6 };

                array(arr);
                sort(arr);
                array(arr);
        }
}
你的错误之处为:for(int y = x+1; y < arr.length-1; y++)  
这里的y表示要判断的次数,举个例子,如果n个数进行比较,比较的
次数应该为:n-1;
希望对您有帮助。

评分

参与人数 1技术分 +1 收起 理由
To + 1 赞一个!

查看全部评分

回复 使用道具 举报
1961993790 发表于 2013-10-26 16:24
正确代码如下:
class Demo {
        public static void sort(int[] arr) {

看来不加你Q是不行了啊!哈哈
回复 使用道具 举报
你的代码错误在于
1、“for(int y = x+1; y < arr.length-1; y++)”,想想看,x是两个比较元素的第一个,y是第二个,而y>x并且y<rr.length-1,这样的话y始终取不到最后一个元素,
    所以程序只能把数组中除了最后一个元素的其他元素进行排序,所以应该把循环条件改为"y<arr.length"
2、还有我认为应该把"<arr.length“改为"arr.length-1",这样可以减少一次循环
  1. class Demo {
  2.         public static void sort(int[] arr)
  3.     {
  4.                 for(int x = 0; x < arr.length-1; x++){
  5.                         for(int y = x+1; y < arr.length; y++){
  6.                                 int num = 0;
  7.                 if(arr[x] > arr[y]){
  8.                         num = arr[y];
  9.                     arr[y] = arr[x];
  10.                     arr[x] = num;
  11.                 }
  12.             }
  13.         }
  14.     }
  15. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马