黑马程序员技术交流社区

标题: 令人蛋疼的排序问题~ [打印本页]

作者: yogaa    时间: 2014-4-15 19:06
标题: 令人蛋疼的排序问题~
对数组{1,8,5,2,4,9,7}进行排序,代码如下:
明明自己模拟过很多遍是能够输出正确结果的,但是输出的结果总是1,2,2,2,4,7,7,,我就想不通了,这哪冒出来的奇葩结果...{:3_54:}
public class SortArray {
        public static void Sort(int[] arr) {

                for (int i = 0; i < arr.length; i++) {
                        for (int j = i; j < arr.length; j++) {
                                if (arr[i] > arr[j]) {
                                        int temp;
                                        temp = arr[j];
                                        arr[i] = arr[j];
                                        arr[j] = temp;
                                }
                        }
                }

        }
        public static void main(String[] args){
                int[] arr = {1,8,5,2,4,9,7};
                Sort(arr);
                for(int i = 0;i<arr.length;i++){
                        System.out.print(arr[i]+",");
                }
        }
}
输出结果为1,2,2,2,4,7,7,
作者: show_play    时间: 2014-4-15 19:28
  1. public class ceshidemo {

  2.         public static void Sort(int[] arr) {

  3.                 for (int i = 0; i < arr.length; i++) {
  4.                         for (int j = i; j < arr.length; j++) {
  5.                                 if (arr[i] > arr[j]) {
  6.                                         swap(arr, i, j);
  7.                                 }
  8.                         }
  9.                 }

  10.         }

  11.         public static void swap(int[] arr, int x, int y) {

  12.                 int temp = arr[x];
  13.                 arr[x] = arr[y];
  14.                 arr[y] = temp;

  15.         }

  16.         public static void show(int[] arr) {
  17.                 for (int i = 0; i < arr.length; i++)
  18.                         System.out.print(arr[i] + ",");
  19.         }

  20.         public static void main(String[] args) {
  21.                 int[] arr = { 1, 8, 5, 2, 4, 9, 7 };
  22.                 Sort(arr);
  23.                 show(arr);
  24.         }
  25. }
复制代码

作者: show_play    时间: 2014-4-15 19:32
你的换位置错了,我新写的swap();

还有就是主方法别写太多内容,思路想好,定义方法解决就行。

这貌似就是面向对象思路。指挥他们做事就行了。
作者: yogaa    时间: 2014-4-15 19:37
show_play 发表于 2014-4-15 19:32
你的换位置错了,我新写的swap();

还有就是主方法别写太多内容,思路想好,定义方法解决就行。

阿西~找了好长时间都找晕了,原来是这里出错了,- - 郁闷额~
非常感谢啊,要不然还要瞎掰半天了~:victory:
作者: wuhyoung    时间: 2014-4-15 20:58
从楼主书写的代码可以看出,此代码是选择排序。
1.楼主在两次循环的时候都多循环了一次,首先按照分析,外层循环1到arr.length-1次,内层循环是i+1到arr.length的循环。楼主循环都多出了一次。
2.楼主在交换的时候出现了错误。

只需将sort函数改写成。即可:
public static void Sort(int[] arr) {


            for (int i = 0; i < arr.length-1; i++) {

                    for (int j = i+1; j < arr.length; j++) {

                            if (arr > arr[j]) {

                                  int temp = arr;

                                  arr = arr[j];

                                  arr[j] = temp;


                            }

                    }

            }


    }



作者: 李东梁    时间: 2014-4-16 12:51
一个字母都要命,仔细对比我和你的代码
帮你注释出来了
  1. public class SortArray {
  2.         public static void Sort(int[] arr) {

  3.                 for (int i = 0; i < arr.length; i++) {
  4.                         for (int j = i; j < arr.length; j++) {
  5.                                 if (arr[i] > arr[j]) {
  6.                                         int temp;
  7.                                        temp = arr[i];//你写的j
  8.                                         arr[i] = arr[j];
  9.                                         arr[j] = temp;
  10.                                 }
  11.                         }
  12.                 }

  13.         }
  14.         public static void main(String[] args){
  15.                 int[] arr = {1,8,5,2,4,9,7};
  16.                 Sort(arr);
  17.                 for(int i = 0;i<arr.length;i++){
  18.                         System.out.print(arr[i]+",");
  19.                 }
  20.         }
  21. }
复制代码

作者: 蔡先苼    时间: 2014-5-5 22:01
你的代码里面判断大小时把两个数颠倒顺序时写错了,应该是
if (arr[i] > arr[j]) {
    int temp;
    temp = arr[j];
    arr[j] = arr[i];
    arr[i] = temp;}//这三行代码的顺序必须搞清楚,即下个被赋值的数应该是上个赋值给其他变量的数,这样才能                            达到调换的效果
         
作者: 提菩--空    时间: 2014-5-9 18:07
把你的代码修改了下。
public class SortArray {
        public static void Sort(int[] arr) {

                for (int i = 0; i < arr.length; i++) {
                        for (int j = i; j < arr.length; j++) {
                                if (arr[i] > arr[j]) {
                                        int temp;
                                        temp = arr[j];
                                        arr[j] = arr[i];
                                        arr[i] = temp;
                                }
                        }
                }

        }
        public static void main(String[] args){
                int[] arr = {1,8,5,2,4,9,7};
                Sort(arr);
                for(int i = 0;i<arr.length;i++){
                        System.out.print(arr[i]+",");
                }
        }
}
作者: 蒋大帅    时间: 2014-5-9 19:04
temp = arr[j];
    arr[j] = arr[i];
    arr[i] = temp判断大小的方式改成这样试一下把




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