关于JAVA 选择排序

看 c.biancheng.net 给的关于选择排序的例程,有个小问题:

1     int[] number = {13,15,24,99,4,1};
2     String end = "\n";
3     int index;
4     for (int i = 1;i < number.length;i++) {
5         index = 0;
6         for(int j = 1;j <= number.length-i;j++) {
7             if (number[j] > number[index]) {
8                 index = j;    // 查找最大值
9             }
10        }
11    end = number[index] + " " + end;    // 定位已排好的数组元素
12    int temp = number[number.length-i];
13    number[number.length-1] = number[index];
14    number[index] = temp;
15    System.out.print("【");
16    for (int j = 0;j < number.length-i;j++) {
17        System.out.print(number[j]+" ");
18    }
19    System.out.print("】"+end);
}

问题就在第13行,为什么是 number[number.length - 1] ?中括号里为什么是 -1 而不是 - i ?更奇怪的是,两种情况下运行得到的结果都是正确的……这是为什么呀?

Thanks!

  • i 并不正确。
    算法从1-6 数组中提取第 1个元素.
    理应从2-6 找数,比较大小。
    而不是2->(6-1)
    只是凑巧,5号位,6号位的数字都太小了不会被改变位置。
    所以你看起来写成i也没关系。实际是有问题的。
字段代码的作用是,最后一个元素与index位置的元素进行数据交换,所以不能用i
int temp = number[number.length-1];
13    number[number.length-1] = number[index];
14    number[index] = temp;

完整选择排序例子,可以参考一下:

package T5;

public class SelectiontSort {
    int a[];
    public SelectiontSort() {
        a = new int[]{8,19,2,3,100,99,1000,888,-1,0};
    }
    public SelectiontSort(int a[]) {
        this.a = a;
    }
    //返回从开始位置找到的最小值的下标
    public int getMinIndex(int start){
        int index=start;
        int min = a[start];
        for(int i=start;i<a.length;i++){
            if(min>a[i]){
                min=a[i];
                index = i;
            }
        }
        return index;
    }
    //选择排序
    public void selectionSort(){
        for(int i=0;i<a.length;i++){
            int index = getMinIndex(i);
            if(index !=i){
                int tmp = a[i];
                a[i]=a[index];
                a[index]=tmp;
            }
        }
    }
    public void print(){
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+"\t");
        }
        System.out.println("");
    }
    public static void main(String[] args) {
        SelectiontSort sort = new SelectiontSort();
        System.out.println("排序前顺序如下:");
        sort.print();
        System.out.println("======================");
        sort.selectionSort();
        sort.print();
    }
}