这是我使用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
我可能做错了什么?
答案 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);