Java 正在尝试实现选择排序,但不起作用
我目前正在从事一个项目,在这个项目中,我实现了不同类型的排序方法来对数组进行排序。我从我的类中得到了这个实现,但由于某些原因它不起作用。我不知道哪里出了问题,任何帮助都将不胜感激Java 正在尝试实现选择排序,但不起作用,java,arrays,sorting,selection-sort,Java,Arrays,Sorting,Selection Sort,我目前正在从事一个项目,在这个项目中,我实现了不同类型的排序方法来对数组进行排序。我从我的类中得到了这个实现,但由于某些原因它不起作用。我不知道哪里出了问题,任何帮助都将不胜感激 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;
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;
}
}
}
}
预期产量
-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;
}
}
}
}
publicstaticvoidselectionsort(int[]a){
int n=a.长度;
对于(int i=0;i
问题在于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]
}
}
您只需使用java.util.Arrays
类即可
int[] a = new int[]{-2, 4, 8, 1, 9, -6};
Arrays.sort(a);
这将数组a
按升序排序(您的预期输出)
Java是用几个工具预先构建的。始终寻找它们,编写自己的算法是很有趣的,但它可能是错误的和艰苦的然后a[i]=a[min]代码>-它的作用是什么?请描述排序机制。输入、当前输出和预期输出。算法:在列表中查找最小值•将其与第一个位置的值交换•对列表的其余部分重复上述步骤(从第二个位置开始,每次前进)•它将列表分为两部分•已排序的子列表。•尚待排序的子列表。@RoshanaPitigala,我不确定排序机制是什么意思,但当前输入是(-2,4,8,1,9,-6)的数组,当前输出与输入的顺序相同。预期输出为(-6,-2,1,4,8,9)
for (int j = i + 1; j < n; j++) {
if (a[j] < a[i]) {
int swap = a[i];
a[i] = a[j];
a[j] = swap;
}
}
int[] a = new int[]{-2, 4, 8, 1, 9, -6};
Arrays.sort(a);