Open Source, Open Future!
  menu
107 文章
ღゝ◡╹)ノ❤️

选择排序

思路

1、用基准值依次与其他数据比较,并记录最小数据对应的索引;
2、交换基准值与最小值的位置;
3、对剩下的元素重复以上两步。

图示

image.png

每次遍历拿黄色数据与蓝色区间比较,得到最小值;然后用最小值与黄色数据交换位置。

代码

算法

    /**
     * 选择排序
     *
     * @param data
     */
    public static void selectOrder(int[] data) {
        for (int i = 0; i < data.length - 1; i++) {
            // 假设最小值索引为i,以data[i]为基准值
            int minIndex = i;
            for (int j = i + 1; j < data.length; j++) {
                // 若找到更小的数据则记录对应的索引
                if (data[minIndex] > data[j]) {
                    minIndex = j;
                }
            }
            // 将基准值与最小值交换位置
            exchange(data, minIndex, i);
        }
    }

    private static void exchange(int[] data, int i, int j) {
        int temp = data[i];
        data[i] = data[j];
        data[j] = temp;
    }

测试

    public static void main(String[] args) {
        int[] data = {5, 3, 4, 1, 2};
        selectOrder(data);
        System.out.println(Arrays.toString(data));
    }

结果

[1, 2, 3, 4, 5]