Selectionsort出错

时间:2013-04-11 02:20:14

标签: java sorting

我尝试了很多不同的变体,并且我一直遇到同样的问题。选择运行后,输出的项目数与我的阵列大小不匹配。我已经使用任何大小为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);

}

}

1 个答案:

答案 0 :(得分:2)

每当您进行交换时,都会打印出一个数字。但是在10个元素的数组中,你只会进行9次交换 - 最后一个元素已经在正确的位置了!要解决此问题,请将System.out.print(array[array.length - 1]);添加到函数末尾。

此外,如果最小元素恰好是i,则不执行交换并且不打印任何元素。这仍然会对数组进行排序,但如果您希望将其打印出来,则可以删除if (min != i)语句,并在每次通过列表时进行交换。

您还应该看一下使用int而不是IntegerInteger通常比int慢,并且您通常只在Java想要一个对象时使用它们。