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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小夏 初级黑马   /  2014-7-15 22:19  /  880 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 小夏 于 2014-7-15 22:25 编辑

//选择排序
                public static void xuanze(int enya[])
                {
                        for (int x=0; x<enya.length-1;x++ )
                        {
                                for (int y=1; y<enya.length-x;y++ )
                                {
                                        if (enya[x]>enya[y])
                                        {
                                                int e= enya[x];
                                                enya[x]=enya[y];
                                                enya[y]=e;
                                        }
                                }
                        }
问题:内循环中 应该是 int y=1+x。如果是 int y =1的话会重复比较,不过重复比较最后应该也能正常排序的呀。可是在执行的时候我发现如果y=1的话,程序只比较0角标位的数。也就是说内循环只循环了一次,为什么只循环一次呢,有点想不通,请高手...其实也用不着高手了,我估计多数人觉得这是小儿科....可是我还是想知道:#


3 个回复

倒序浏览
其实,并没有循环一次,这是后面的循环,有把之前排序又排会来了。x=0时,内部循环正常;x=1时,内部循环正常。但是之后就不正常了。当x=3时,内循环从y=1开始,这时要知道enya[y]里面存的是第二小的数,后面的肯定不之前的要大,就又进行了值交换。所以就又换回来了。你可以调试跟踪一下,一看就懂了
回复 使用道具 举报
不太懂,,,不过帮你顶了
回复 使用道具 举报
汉谟拉比 发表于 2014-7-16 00:09
不太懂,,,不过帮你顶了

一楼是正解,排完之后,重排的时候又把位置调换回来了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马