日期:2014-05-20  浏览次数:20782 次

我的选择排序算法问题出在哪里?
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;