试图实现选择排序但它不会工作
trying to implement selection sort but it wont work
我目前正在从事一个项目,我在该项目中实现了不同类型的排序方法来对数组进行排序。我从我的 class 得到了这个实现,但由于某种原因它不起作用。我不确定哪里出了问题,如有任何帮助,我们将不胜感激。
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
您在这里缺少更新最小索引的关键步骤。看看下面代码中的 if block。
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;
}
}
}
}
问题出在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;
}
}
您可以为此使用 java.util.Arrays
class
int[] a = new int[]{-2, 4, 8, 1, 9, -6};
Arrays.sort(a);
这会将数组 a
排序为升序(您的预期输出)。
Java 是 pre-built 有几个工具。经常找他们,写自己的算法很有趣,但它可能会出错并且很费力。
我目前正在从事一个项目,我在该项目中实现了不同类型的排序方法来对数组进行排序。我从我的 class 得到了这个实现,但由于某种原因它不起作用。我不确定哪里出了问题,如有任何帮助,我们将不胜感激。
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
您在这里缺少更新最小索引的关键步骤。看看下面代码中的 if block。
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;
}
}
}
}
问题出在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;
}
}
您可以为此使用 java.util.Arrays
class
int[] a = new int[]{-2, 4, 8, 1, 9, -6};
Arrays.sort(a);
这会将数组 a
排序为升序(您的预期输出)。
Java 是 pre-built 有几个工具。经常找他们,写自己的算法很有趣,但它可能会出错并且很费力。