0

我尝试了许多不同的变体,但我一直遇到同样的问题。selectio nsort 运行后,输出的项目数与我的数组大小不匹配。我一直在使用任何大小为 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);

}

}

4

1 回答 1

2

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

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

您还应该看看使用ints 而不是Integers。AnInteger通常比 an 慢,int并且您通常仅在 Java 需要对象时使用它们。

于 2013-04-11T02:25:59.307 回答