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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贠(yun)靖 高级黑马   /  2012-3-10 19:34  /  2547 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public void selectSort(int[] arr)  
{
     for (int x=0;x<arr.length-1 ;x++ )
     {
           for (int y=x;y+1<arr.length ;y++ ) //这样写会排不完 有少排了一次循环   
        {                          //而我改成 for(y=x+1;y<arr.length;y++)  就能排序
                    if (arr[y]>arr[y+1])             //谁能帮我解答一下  我感觉这两种写法都一样啊
               {                           // 到底哪里出问题了?
                swap(arr,y,y+1);
               }
        }
     }
        prinSort(arr);   //输出方法
}

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

9 个回复

倒序浏览
y+1<arr.length   其实就是y<arr.length-1

你改成y+1<=arr.length应该就可以了
回复 使用道具 举报
这是冒泡排序和选择排序的杂交体啊!
选择排序的话,为什么要换arr[y]和arr[y+1]呢?换arr[x]和arr[y]才对吧!
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])
                                {
                                        swap(arr,x,y);
                                }
                        }
                }
        }

评分

参与人数 1技术分 +1 收起 理由
老罗 + 1

查看全部评分

回复 使用道具 举报
王睿 发表于 2012-3-10 19:52
y+1

不行 会数组越界的~~~
回复 使用道具 举报
倪鹏博 发表于 2012-3-10 19:52
这是冒泡排序和选择排序的杂交体啊!
选择排序的话,为什么要换arr[y]和arr[y+1]呢?换arr[x]和arr[y]才对 ...

我只是想换一种写法   for写的不同  交换就写的不同啊~~!
回复 使用道具 举报
本帖最后由 倪鹏博 于 2012-3-10 20:19 编辑
贠(yun)靖 发表于 2012-3-10 19:59
我只是想换一种写法   for写的不同  交换就写的不同啊~~!


你的写法是错误的,两种写法都不会出结果的!
冒泡排序和选择排序的思想是不一样的,所以不能混合使用!
按照你的程序:
for(y=x+1;y<arr.length;y++)  的时候,首先下标会越界!其次,这情况下你的arr[0]没有参与排序!所以结果肯定是不对的!
for(y=x;y+1<arr.length;y++)  的时候,x=y=0第一次执行的时候,是arr[0]和arr[1]中的最小值在前。。。。。。
                                                               x=y=1的时候,是arr[1]和arr[2]取最小值
也就是说,arr[0]只参与了一次比较,你把arr[0]和arr[1]的最小值当成了整个数组的最小值,这显然是不对的!结果不可能正确!

评分

参与人数 2技术分 +1 黑马币 +4 收起 理由
房宝彬 + 1
贠(yun)靖 + 4 很给力!

查看全部评分

回复 使用道具 举报
 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果:
  ①初始状态:无序区为R[1..n],有序区为空。
  ②第1趟排序
  在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
  ……
  ③第i趟排序
  第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
  这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。
  
回复 使用道具 举报
黄方 中级黑马 2012-3-10 20:34:24
8#
本帖最后由 黄方 于 2012-3-10 20:45 编辑

!!!!!!!!!!!!!!!
更多图片 小图 大图
组图打开中,请稍候......
回复 使用道具 举报
本帖最后由 了无尘 于 2012-3-10 23:07 编辑

你这个定义个2维数组来看看xy的对比表好理解点
回复 使用道具 举报
上面的图片看不清啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马