为了账号安全,请及时绑定邮箱和手机立即绑定

Java 这个排序哪里错了,为什么遍历失败啊,来个大神,急急急

Java 这个排序哪里错了,为什么遍历失败啊,来个大神,急急急

qq_曹振_0 2018-04-09 09:46:50
package test;public class SelectSort {    public static int[]sort(int[]a){        int flag;        for (int i = 0; i < a.length-1; i++) {            //选择排序 首先找到整个数列最小值            //然后让最小值在最低位,继续遍历             flag=i;            for (int j = i+1; j < a.length; j++) {                if(a[j]<a[i]){                    flag=j;                            }            }            if(flag!=i){                int temp=a[i];                a[i]=a[flag];                a[flag]=temp;                }                    }        return a;    }    public static void main(String[] args) {    int[]a={11,10,55,78,100,111,45,56,4,100,32,12,79,90,345,1000};    SelectSort.sort(a);    for (int i : a) {        System.out.print(i+" ");    }    }}失败结果:4 10 12 55 90 100 32 45 11 79 56 78 100 111 345 1000
查看完整描述

4 回答

已采纳
?
半枯

TA贡献101条经验 获得超45个赞

原因是存在比a[i]为小的多个a[j],而你要在第二个循环里拿一个a[i]和多个a[j]换来换去。换到的是最后一次出现的小值。

查看完整回答
1 反对 回复 2018-04-09
  • qq_曹振_0
    qq_曹振_0
    一语解惑,多谢阁下了。最后 把a[j]<a[i]改为a[j]<a[flag],就可以选出最小值了, ps自己看真的看好久看不出来
  • 半枯
    半枯
    楼下大神已经说了怎么改,我就帮你解释解释为什么
?
产品经理不是经理

TA贡献481条经验 获得超143个赞

flag=i;
for (int j = flag+1; j < a.length; j++) {
    if(a[j]<a[flag]){
        flag=j;
    }
}  
//你的部分代码改成这样就可以了。

https://img1.sycdn.imooc.com//5acc1818000112b804770124.jpg

//补充运行结果。

查看完整回答
2 反对 回复 2018-04-09
点击展开后面1
?
慕粉3166282

TA贡献28条经验 获得超3个赞

楼上说得对


查看完整回答
反对 回复 2018-04-09
?
奔跑的虫子

TA贡献33条经验 获得超21个赞

没细看,不过for循环有点问题,可能出现在这儿,你回头试一试。 for (int i = 0; i < a.length-1; i++) 改为for (int i = 0; i < a.length; i++);
查看完整回答
反对 回复 2018-04-09
  • 4 回答
  • 1 关注
  • 2189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信