黑马程序员技术交流社区

标题: 关于排序问题 [打印本页]

作者: 帅气的冬瓜    时间: 2013-10-31 11:56
标题: 关于排序问题
          今天复习发现前后所记笔记,有所不同,瞬间懵懂       思路最重要呀      求解
   选择排序:问题所在  两个for语句
                             void selectArr(int[] arr)
                            {
                                   for (int x=0;x<arr.length;x++)     //另一种写法:for (int x=0;x<arr.length-1;x++)
                                     {  
                                          for(int y=x+1;y<arr.length-1;x++)    //    for(int y=x+1;y=arr.length;x++)
                                             {if (arr[x]>arr[y])
                                               swap(arr,x,y);
                                            }
                                       }
                             }
      这个我是这样理解的 ,这两种写法是一样,只要保证最后一个比较就行。不知理解是否正确。
选择排序:问题所在  两个for语句
                             void bubleSort(int[] arr)
                            {
                                   for (int x=0;x<arr.length;x++)     //另一种写法:for (int x=0;x<arr.length-1;x++)
                                     {
                                         for(int y=0;x<arr.length-x-1;y++)    //    for(int y=0;y=arr.length-x-1;x++)
                                          {
                                            if (arr[x]>arr[y+1])
                                               swap(arr,y,y+1);
                                            }
                                       }
                             }
关键是这个,不知道是否是笔记记错,就是转不过弯来了,崩溃。还是请教一下记得牢。









作者: Gump    时间: 2013-10-31 12:25
本帖最后由 Gump 于 2013-10-31 12:32 编辑

帮你改正一下选择排序:
public static void selectSort(int[] arr)
        {
                for (int x=0; x<arr.length-1; x++)
                {
                        for(int y=x+1;y<arr.length;y++)
                        {
                                if (arr[x]>arr[y])
                                {
                                        int temp = arr[x];
                                        arr[x] = arr[y];
                                        arr[y] = temp;
                                }
                        }
                }
        }


冒泡排序:
public static void bubbleSort(int[] arr)
        {
                for (int x=0; x<arr.length-1; x++)
                {
                        for (int y=0; y<arr.length-x-1; y++) //让每一次比较的元素减少,-1:避免角标越界。
                        {
                                if (arr[y]>arr[y+1])
                                {
                                        int temp =arr[y];
                                        arr[y] = arr[y+1];
                                        arr[y+1] = temp;
                                        //swap(arr,y,y+1);  这个是下面定义的一个函数
                                }
                        }
                }
        }

建议:初学还是先记住一种较为好理解的方法比较好,多练习,其他的方法以后接触到自然就懂了。

作者: 魏春旭    时间: 2013-10-31 13:05
我好像没太懂楼主的意思。
不过你的第一种方法是选择排序,注释部分所谓的另一种方法才是正确的。注释之前的代码会出现数组角标越界。

下边的一种方法是冒泡法排序,同样,你注释掉的才是正确的,前边的代码同样会角标越界。

建议楼主看视频的同时多加练习,共同努力。
作者: The_Wizard    时间: 2013-11-1 11:34
为什么不用这种排序方式呢?我感觉这种比选择或者冒泡好多了。另外问下,下面这种排序叫什么名字啊?
        public static void selectSort(int[] arr) {
                for (int x = 0; x < arr.length - 1; x++) {
                        int index = x;
                        for (int y = x + 1; y < arr.length; y++) {
                                if (arr[index] > arr[y]) {
                                        index = y;
                                }
                        }
                        if(index != x) {
                                int temp = arr[index];
                                arr[index] = arr[x];
                                arr[x] = temp;
                        }
                }
        }




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