我使用选择方法来解决这个问题,但我遇到了一些问题。看到答案之后,我在程序中发现了两个错误然后修复它。我很困惑为什么会出现这两个错误,有人能帮我解释一下吗?
这是我的代码:
import java.util.Scanner;
public class JavaTest{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
int[] myList = new int[5];
for (int i = 0; i < 5; i++){
myList[i] = input.nextInt();
}
for (int i = 0; i < 4; i++){
int j = 0;
// Why do I need to put this outside inner for loop?
int smallest = myList[i];
// Why do I need to give the value of i to index after i increase by 1?
int index = i;
for (j = i + 1; j < 5; j++){
if (smallest > myList[j]){
smallest = myList[j];
index = j;
}
}
if (index != i){
myList[index] = myList[i];
myList[i] = smallest;
}
}
for (int i = 0; i < 5; i++){
System.out.print(myList[i] + " ");
}
input.close();
}
}
答案 0 :(得分:1)
选择算法是一种用于在列表或数组中查找第k个最小数字的算法。
每次迭代算法都会找到最小的数字i到myList.length:
第一次迭代在0到4之间
第二次迭代在1到4之间等等......
// Why do I need to put this outside inner for loop? int smallest = myList[i];
在第一次迭代之后,“最小”的值将是列表中的实际最小数字而不是索引1到4中的最小数字,然后内部循环将不执行任何操作。
// Why do I need to give the value of i to index after i increase by 1? int index = i;
将索引初始化为(可疑)最小数字的当前位置。如果“最小”的当前值是迭代中的最小数字,则第二个“for循环”将不会执行任何操作。
然后条件:
(索引!= i)
即使它不应该
也是如此