【问题标题】:Is this a possible implementation of Selection Sort这是选择排序的可能实现吗
【发布时间】:2016-11-30 18:10:15
【问题描述】:

我想知道,如果我下面的 SelectionSort 实现是一个可能的实现。感谢你们! :)

    public static int[] mySelectionSort (int [] array){

    int position = 0;
    int tmp;

    for (int j = array.length -1; j >= 0; j--){

        int max = array[0];

        for (int i = 0; i <= j; i++){

            if (array[i] >= max){

                max = array[i];
                position = i;
            }   
        }

        tmp = array[j];
        array[j] = max;
        array[position] = tmp;
    }
    return array;
}

【问题讨论】:

    标签: algorithm sorting selection-sort


    【解决方案1】:

    是的,这是选择排序的变体。

    您可以使用 for (int i = 0; i &lt; j 省略最后一次内部循环运行 - 与自身交换最后一项是没有意义的。

    可以考虑循环不变量:

    • 有两个子数组 - 开始部分 B 和结束部分 E
    • E 包含已排序的序列
    • E 中的所有项目都不小于 B 中的项目
    • B 中最大的项与 E 连接

    【讨论】:

    • 感谢您的回答。我用一些例子检查了算法,它运行良好。为什么立场必须改变?在我看来它是正确的,因为 position 只保存了 max 元素的位置,当内部循环结束时,位置 j 的元素与位置 position 的元素交换。
    猜你喜欢
    • 1970-01-01
    • 2016-05-28
    • 2021-04-14
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-14
    • 1970-01-01
    相关资源
    最近更新 更多