故障调试SelectionSort方法

时间:2018-11-26 08:42:39

标签: java algorithm sorting selection-sort

所以我在测试此代码时注意到:

public class SelectionSort{

    public static void sorted(int[] array){

        for (int i = 0; i < array.length - 1; i++) {
            int key = array[i];
            int index = i;

            for (int j = 0; j < array.length; j++) {
                if (array[j] < array[i]) {
                key = array[j];
                index = j;
                }
            }

            int temp = array[i];
            array[i] = array[index];
            array[index] = temp;
        }
    }

    //test function
    public static void main(String[] args) {
        int[] array = new int[]{4,3,6,7,1};
        sorted(array);

        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        } 
    }
}

我得到输出:{3,1,4,6,7}显然没有排序。但是,当我将内部循环计数器从for(int j = 0; j < array.length; j++)更改为for(int j = 1; j < array.length; j++)时,我得到了正确的输出{1,3,4,6,7}。好奇为什么这在逻辑上是发生的。

1 个答案:

答案 0 :(得分:0)

基本思想是 从外循环的一次迭代中,它将数组中的最大元素移到数组的末尾。

因此,从下一次迭代开始,您可以跳过数组中的最后一个元素

for (int j = 0; j < array.length  - i; j++)

但是您需要继续检查第一个元素是否最近。