选择排序不起作用

时间:2015-02-09 05:12:45

标签: java algorithm sorting selection-sort

这是我使用Java 1.7的选择排序实现:

public class SelectionSort {

    private static void swap(int[] a, int i, int j) {
        int temp = a[i];
        a[i] = a[j];
        a[j] = temp;
    }

    public static int[] sort(int[] numbers) {
        for (int i = 0; i < numbers.length - 1; i++) {
            int smallestValue = i;
            for (int j = i + 1; j < numbers.length; j++) {
                if (numbers[j] < numbers[smallestValue])
                smallestValue = j;
            }
            swap(numbers, smallestValue, i);
        }
        return numbers;
    }
}

在我的测试工具中,以下代码用于调用sort方法:

public static void main(String args[]) {    
    int[] unsortedNumbers = new int[] { 9, 8, 5, 4, 3, 7, 2, 1 };
    int[] sortedNumbers = new int[0];

    System.out.println("\nUnsorted Numbers:"); 
    if (unsortedNumbers.length >= 1) {
        System.out.print(unsortedNumbers[0]);
    } 

    for (int i=1; i <unsortedNumbers.length; i++) {
        System.out.print(", " + unsortedNumbers[i]);
    }

    sortedNumbers = SelectionSort.sort(unsortedNumbers);

    System.out.println("\n\nSorted Numbers:");

    if (sortedNumbers.length >= 1) {
        System.out.print(sortedNumbers[0]);
    }

    for (int j=1; j < sortedNumbers.length; j++) {
        System.out.print(", " + sortedNumbers.length);
    }

}

这是非常令人沮丧/错误的输出:

Unsorted Numbers:
9, 8, 5, 4, 3, 7, 2, 1

Sorted Numbers:
1, 8, 8, 8, 8, 8, 8, 8

我可能做错了什么?

3 个答案:

答案 0 :(得分:2)

for (int j=1; j < sortedNumbers.length; j++) {
    System.out.print(", " + sortedNumbers.length);
}

注意如何重复打印数组的长度,而不是其中的数字。

你可能意味着这个:

for (int j=1; j < sortedNumbers.length; j++) {
    System.out.print(", " + sortedNumbers[j]);
}

答案 1 :(得分:1)

if (numbers[j] < numbers[smallestValue]);
smallestValue = j;

相同
if (numbers[j] < numbers[smallestValue])
    ;
smallestValue = j;

即。 “如果此数字小于最小数字,则不执行任何操作。然后,将smallestValue设置为j。”在Java(和C,以及许多其他语言,其语法派生自C)中,;是一个无效的语句。

删除额外的分号。

答案 2 :(得分:0)

您还需要if方法中的其他sort语句:

if (smallestValue != i) {
    swap(numbers, smallestValue, i);
}

使用该代码代替:

swap(numbers, smallestValue, i);