这个数组排序有问题(Java)

时间:2017-01-02 21:22:28

标签: java arrays sorting

我有这个:

class sorter {
    static void main(){
        int[] a={3,2,1}; int t=0;
        for(int i=0; i<2; i++){
            int small=a[i];
            for(int j=i+1; j<3; j++){
                if(a[j]<small){
                    small=a[j];
                    t=j;
                }
            }
            int tmp =a[i];
            a[i]=small;
            a[t]=tmp;
        }
        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
    }
}

尝试对此数组进行排序,但输出为:

1
2
2

如果有人可以指出错误,我真的很感激。

2 个答案:

答案 0 :(得分:3)

如果您的内部循环找不到小于small的任何内容,则会在最后设置的值中留下t。由于在内循环退出后无条件地将a[i]a[t]交换,这可能导致错误的交换。在进入内循环之前,您可能希望每次通过外循环初始化ti

int[] a={3,2,1};
for(int i=0; i<2; i++){
    int small=a[i];
    int t = i;
    for(int j=i+1; j<3; j++){
        if(a[j]<small){
            small=a[j];
            t=j;
        }
    }
    if (i != t) {
        int tmp =a[i];
        a[i]=small;
        a[t]=tmp;
    }
}

答案 1 :(得分:1)

问题是您的T未重置

public class Sorter {
public static void main(String []args){
    int[] a={1,2,3,4,5,0,9,8,7,6};
    int t=0; // points to index of current smallest
    for(int i=0; i<a.length; i++){
        t=i; // Point to current index of not sorted
        int smallest=a[i];
        for(int j=i+1; j<a.length; j++){
            if(a[j]<smallest){
                smallest=a[j];
                t=j;
            }
        }

        int tmp =a[i];
        a[i]=smallest;
        a[t]=tmp;
    }
    for (int i =0; i < a.length; i++) {
        System.out.println(a[i]);
    }
}