我目前正在从事一个项目,在该项目中我实现了不同类型的排序方法以对数组进行排序。我从课堂上获得了此实现,但由于某种原因,它无法正常工作。我不确定问题出在哪里,任何帮助将不胜感激。
public static void selectionSort(int[] a) {
int n = a.length;
System.out.println(n);
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[min]) {
int swap = a[i];
a[i] = a[min];
a[min] = swap;
}
}
}
}
算法:在列表中找到最小值。将其与第一位置的值交换。对列表的其余部分重复上述步骤(从第二个位置开始,每次都前进)。它将列表分为两部分。已排序项目的子列表。尚待排序的项目子列表。
输入
int[] a = new int[]{-2, 4, 8, 1, 9, -6};
预期产量
-6, -2, 1, 4, 8, 9
答案 0 :(得分:1)
您错过了在此处更新最小索引的关键步骤。看看下面的代码中的如果阻止。
public static void selectionSort(int[] a) {
int n = a.length;
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[min]) {
min = j;
int swap = a[i];
a[i] = a[min];
a[min] = swap;
}
}
}
}
答案 1 :(得分:1)
问题出在for
循环,min
和i
变量中。
int min = i; //min variable is useless, as min is always equals to i
for (int j = i + 1; j < n; j++) {
if (a[j] < a[min]) {
int swap = a[i];
a[i] = a[min]; // remember min equals to i, so here you are assigning the same value
a[min] = swap; // this should be a[j]
}
}
更改for
循环
for (int j = i + 1; j < n; j++) {
if (a[j] < a[i]) {
int swap = a[i];
a[i] = a[j];
a[j] = swap;
}
}
答案 2 :(得分:1)
您可以为此使用java.util.Arrays
类
int[] a = new int[]{-2, 4, 8, 1, 9, -6};
Arrays.sort(a);
这会将数组a
按升序排序(您的预期输出)。
Java是使用几种工具预先构建的。一直在寻找它们,编写自己的算法很有趣,但这可能是错误和艰辛的。