所以我在测试此代码时注意到:
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}。好奇为什么这在逻辑上是发生的。
答案 0 :(得分:0)
基本思想是 从外循环的一次迭代中,它将数组中的最大元素移到数组的末尾。
因此,从下一次迭代开始,您可以跳过数组中的最后一个元素
for (int j = 0; j < array.length - i; j++)
但是您需要继续检查第一个元素是否最近。