试图实现选择排序但它不会工作

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循环,mini变量。

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 有几个工具。经常找他们,写自己的算法很有趣,但它可能会出错并且很费力。