Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在尝试实现选择排序,但不起作用_Java_Arrays_Sorting_Selection Sort - Fatal编程技术网

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);