我被要求做出选择排序算法,但它不起作用,我不知道为什么。这是代码:
int count = 0;
int count2;
int min;
int size = scan.nextInt();
int temp = 0;
int[] numbers = new int[size];
while (count < size) {
numbers[count] = scan.nextInt();
count ++;
}
count = 0;
while (count < size) {
count2 = size;
min = numbers[count];
while (count < count2) {
count2 --;
if (numbers[count2] < numbers[min]) {
min = count2;
}
}
temp = numbers[temp];
numbers[temp] = numbers[count];
numbers[count] = temp;
count ++;
}
count = 0;
while (count < size) {
System.out.println(numbers[count]);
count ++;
}
}
输入: 10 1 0 2 9 3 8 4 7 五 6
输出: 1 2 9 8 3 3 8 4 7 4
答案 0 :(得分:1)
在while循环中,您尝试使用numbers [0]元素作为数字索引[] numbers[min]
min = numbers[count]; \\min is value of first element of numbers[]
while (count < count2) {
count2 --;
if (numbers[count2] < numbers[min]) { \\ you try to use value of numbers[0] element as index of numbers[] aray.
min = count2;
}
使用if (numbers[count2] < numbers[min])
替换(numbers[count2] < min)
答案 1 :(得分:0)
temp = numbers[temp];
numbers[temp] = numbers[count];
numbers[count] = temp;
count ++;
再看看这段代码。
如果你在第一个输入为11的情况下运行它,那么当索引超出范围时会出错。
特别是,您计划用temp = numbers[temp]
完成什么?你将temp分配给基本上是一个任意数字,因为numbers[0]
可以是任何东西。
答案 2 :(得分:0)
您在输出中获得重复值(不在输入中)这一事实意味着您的交换不起作用,因此:
temp = numbers[temp];
numbers[temp] = numbers[count];
numbers[count] = temp;
错了。
应该是min
,而不是temp
:
temp = numbers[min];
numbers[min] = numbers[count];
numbers[count] = temp;
答案 3 :(得分:0)
这是一种算法,可以在java中使用for的强大功能。要查看数组或列表,您可以执行for (int current : array)
这比使用while或for like更方便。
int min;
int mem = 0;
int size = 11;
int [] numbers = {10, 1, 0, 2, 9, 3, 8, 4, 7, 5, 6};
for (int i=0; i<size-1; i++){
min =i;
for(int j=i+1; j<size; j++){
if (numbers[j]<numbers[min]){
min = j;
}
}
// swap
mem= numbers[i];
numbers[i] = numbers[min];
numbers[min] = mem;
}
for (int toPrint : numbers){
System.out.println(toPrint);
}
}