当前位置: 代码迷 >> J2SE >> 小弟我的选择排序算法有关问题出在哪里
  详细解决方案

小弟我的选择排序算法有关问题出在哪里

热度:118   发布时间:2016-04-24 01:21:13.0
我的选择排序算法问题出在哪里?
Java code
public class Args {    public static void main(String[] args) {        int[] a = new int[args.length];        int flag = 0;        for(int i = 0;i < args.length;i++) {            a[i] = Integer.parseInt(args[i]);            }        for(int i = 0;i < a.length; i++)             System.out.print(a[i]+" ");        System.out.println();        int tmp;        for(int i = 0;i < a.length-1; i++) {            tmp = a[i];            for(int j = i+1;j< a.length; j++) {                if(tmp>a[j]) {                    tmp = a[j];                    flag = j;                    }                                }            a[flag] = a[i];            a[i] = tmp;            }        for(int i = 0;i < a.length; i++) {            System.out.print(a[i]+" ");            }        }}

上面是我的代码,我本程序的意图是利用命令行参数输入若干数字,把输入的数据放到数组a[]中,然后对输入数字进行从小到大排序,可是运行结果有点问题,但是我不知道问题出再哪里?
比如输入:1 2 3 4 6
运行结果:4 2 3 4 6

------解决方案--------------------
Java code
for(int i = 0;i < a.length-1; i++) {            tmp = a[i];            flag = -1;            for(int j = i+1;j< a.length; j++) {                if(tmp>a[j]) {                    tmp = a[j];                    flag = j;                    }                                }            //a[flag] = a[i]; //这里不是在for(j)里面交换,而是在for(j)外面交换,            //a[i] = tmp; //也就是是找完最小一个交换            }            if (flag != -1) { //最好做一个判断,确实找到有比a[i]小的才交换,否则不交换                a[flag] = a[i];//要不然找不到比a[i]小的也交换了                a[i] = tmp;            }
------解决方案--------------------
简单来说就是在你的代码里加上一行
tmp=a[flag];//这是新加的
a[flag] = a[i];
a[i] = tmp;
  相关解决方案