试图实现选择排序,但无法正常工作

时间:2019-05-10 15:40:01

标签: 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;
        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

3 个答案:

答案 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循环,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;
    }
}

答案 2 :(得分:1)

您可以为此使用java.util.Arrays

int[] a = new int[]{-2, 4, 8, 1, 9, -6};
Arrays.sort(a);

这会将数组a按升序排序(您的预期输出)。


Java是使用几种工具预先构建的。一直在寻找它们,编写自己的算法很有趣,但这可能是错误和艰辛的。