我尝试了很多不同的变体,并且我一直遇到同样的问题。选择运行后,输出的项目数与我的阵列大小不匹配。我已经使用任何大小为10的数组,但输出不包含10个数字。但是,选择排序的输出已排序。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Sorts {
public static Integer[] createArray(int size) {
List<Integer> list = new ArrayList<Integer>();
for (int i = 0; i < size; i++)
list.add(i);
Collections.shuffle(list);
Integer[] array = list.toArray(new Integer[list.size()]);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]);
}
return array;
}
public static void selectionSort(Integer[] array) {
Integer min;
for (Integer i = 0; i < array.length - 1; i++) {
min = i;
for (Integer j = i + 1; j < array.length; j++) {
if (array[j].compareTo(array[min]) > 0) {
min = j;
}
}
if (min != i) {
Integer temp = array[i];
array[i] = array[min];
array[min] = temp;
System.out.print(array[i]);
}
}
}
public static void main(String args[]) {
int number = 10;
Integer[] list = createArray(number);
System.out.println("");
selectionSort(list);
}
}
答案 0 :(得分:2)
每当您进行交换时,都会打印出一个数字。但是在10个元素的数组中,你只会进行9次交换 - 最后一个元素已经在正确的位置了!要解决此问题,请将System.out.print(array[array.length - 1]);
添加到函数末尾。
此外,如果最小元素恰好是i
,则不执行交换并且不打印任何元素。这仍然会对数组进行排序,但如果您希望将其打印出来,则可以删除if (min != i)
语句,并在每次通过列表时进行交换。
您还应该看一下使用int
而不是Integer
。 Integer
通常比int
慢,并且您通常只在Java想要一个对象时使用它们。