有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中排序更好的选择排序

首先,你能告诉我哪段代码是更好的选择排序吗?那么如果你知道更好的选择排序方法,你能分享一下吗

注意:请仔细检查第二个代码,因为它比看起来更复杂

class SelectionSort {

    public static void selectionSort(double[] list) {
        for (int i = 0; i < list.length - 1; i++) {

            double currentMin = list[i];
            int currentMinIndex = i;

            for (int j = i + 1; j < list.length; j++) {
                if (currentMin > list[j]) {
                    currentMin = list[j];
                    currentMinIndex = j;
                }
            }

            if (currentMinIndex != i) {
                list[currentMinIndex] = list[i];
                list[i] = currentMin;
            }
        }
    }
}

class SelectionSort {

    public static double[] selectionSort(double[] array) {
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < i; j++) {
                if (array[j] > array[i]) {
                    double temp = array[j];
                    array[j] = array[i];
                    array[i] = temp;
                }
            }
        }
    }
}

共 (2) 个答案

  1. # 1 楼答案

    这两种方法都能解决你的问题,但第二种方法很明显,我认为会更快。为什么?因为它必须采取较少的行动来完成问题:在第一个循环中,你有两个循环(就像在第二个循环中一样),但在第二个循环中,它也必须做出2个ifs和1个if。我对此并不十分确定,但是,如果程序必须采取更少的行动,它会更快(只是一个假设)

    另外,我认为它会更快,因为在第一个例子中,你需要遍历所有的j元素,其中一些元素是不必要的(你必须做一个额外的if),而在第二个例子中,你只需要遍历你需要的元素,所以它也更有效

    总之,我认为你必须使用的最佳实践是第二种

    我希望这会对你有所帮助

  2. # 2 楼答案

    就性能而言,两者都是相似的,O(n2)。不过,第二个代码要干净一些