黑马程序员技术交流社区

标题: 关于选择排序中的一些问题 [打印本页]

作者: 奋斗的小强29    时间: 2013-1-13 16:12
标题: 关于选择排序中的一些问题
  1. class SelectSort
  2. {
  3. public static void main(String[] args)
  4. {
  5. int[] arry = {5,9,3,1,7,9,4,6};
  6. printArry(arry);
  7. selectSort(arry);
  8. printArry(arry);
  9. }
  10. public static void selectSort(int[] arry)
  11. {
  12. for(int x=0;x<arry.length-1;x++)
  13. {
  14. for(int y=1;y<arry.length;y++)
  15. {
  16. if(arry[x]>arry[y])
  17. {
  18. int temp = arry[x];
  19. arry[y] = arry[x];
  20. arry[y] = temp;//这下面为啥不需要返回值呢?
  21. }
  22. }
  23. }
  24. }
  25. public static void printArry(int[] arry)
  26. {
  27. System.out.print("[");
  28. for(int x=0;x<arry.length;x++)
  29. {
  30. if(x!=arry.length-1)
  31. System.out.print(arry[x]+",");
  32. else
  33. System.out.println(arry[x]+"]");

  34. }

  35. }
  36. }
复制代码
这个类运行时结果为啥会是这样?
[5,9,3,1,7,9,4,6]
[5,9,9,9,9,9,9,9]
作者: 高浩    时间: 2013-1-13 16:28
本帖最后由 细雨不和风 于 2013-1-13 16:29 编辑


1方法,是用来打印出指定的数组的,

2方法,是对数组进行排序操作,只是对数组里面的元素按大小排好顺序,这是方法2的功能,

3方法,还是打印的数组的方法,但执行这个方法时,2方法已经对数组进行了排序的改动,此时的数组里的元素已经拍好了顺序。
只需打印出来就可以了,就不需要返回值,而你的方法也没定义是没有有返回值类型的,如果返回值的话会报错的。

作者: 林其荣    时间: 2013-1-13 16:39
在for(int y=1;y<arry.length;y++) * 在你内循环要改成int y=x+1 因为在比较过程中他本身不需要比较只需要比较他后面的数就可以了
        int temp = arry[x];
        arry[y] = arry[x];
        arry[y] = temp;
        应该改成
        int temp = arry[x];
        arry[x] = arry[y];
        arry[y] = temp;
        因为你把arry[x]的值赋给temp后 应该再把arry[y]的值赋给arry[x] 然后再把temp的值赋给arry[y]
        这是他们比较大小之后相互换位
        arry[y] = temp;//这下面为啥不需要返回值呢? 这里不需要返回值那是因为你所定义的方法为void所以不需要返回值
作者: 奋斗的小强29    时间: 2013-1-13 16:57
细雨不和风 发表于 2013-1-13 16:28
  • printArry(arry);
  • selectSort(arry);
  • printArry(arry);

  • 谢谢了,我看看。。。
    作者: 奋斗的小强29    时间: 2013-1-13 16:58
    林其荣 发表于 2013-1-13 16:39
    在for(int y=1;y

    :handshake谢谢
    作者: 高浩    时间: 2013-1-13 17:01
    奋斗的小强29 发表于 2013-1-13 16:57
    谢谢了,我看看。。。

    呵呵,不用谢
    作者: 邝雄伟    时间: 2013-1-13 17:04
    问题1:20.arry[y] = temp;//这下面为啥不需要返回值呢?   答:需不需要返回值是由方法决定的,当方法是void类型就不需要返回值
    问题2:01.class SelectSort

    02.{

    03.public static void main(String[] args)

    04.{

    05.int[] arry = {5,9,3,1,7,9,4,6};

    06.printArry(arry);

    07.selectSort(arry);

    08.printArry(arry);

    09.}

    10.public static void selectSort(int[] arry)

    11.{

    12.for(int x=0;x<arry.length-1;x++)

    13.{

    14.for(int y=1;y<arry.length;y++)//这里应该是for(int y = x+1; y<arry.length; y++)
    ,对于排列的问题,自己把数组是图画出来容易理解
    15.{

    16.if(arry[x]>arry[y])

    17.{

    18.int temp = arry[x];

    19.arry[y] = arry[x];//这里应该是arry[x] = arry[y];
    20.arry[y] = temp;//这下面为啥不需要返回值呢?

    21.}

    22.}

    23.}

    24.}

    25.public static void printArry(int[] arry)

    26.{

    27.System.out.print("[");

    28.for(int x=0;x<arry.length;x++)

    29.{

    30.if(x!=arry.length-1)

    31.System.out.print(arry[x]+",");

    32.else

    33.System.out.println(arry[x]+"]");

    34.

    35.}

    36.

    37.}

    38.}









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