首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

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

2012-04-18 
我的选择排序算法问题出在哪里?Java codepublic class Args {public static void main(String[] args) {in

我的选择排序算法问题出在哪里?

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;

热点排行