定义

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。

例如有个数组的长度为10
第一次:从下标0-9中找到最小(大)的数,将这个数的值和下标为0的值交换
第二次:因为下标为0的值已经是最小(大)的了,所以从下标1-9中找到最小(大)的数,将这个数的值和下标为1的值交换
第三次:因为下标为1的值已经是第二小(大)的了,所以从下标2-9中找到最小(大)的数,将这个数的值和下标为2的值交换

......

以此类推

代码示例

public class CodeSelectSort {

    /**
     * 从小到大排序
     * @param arr
     */
    public static void selectSort(int[] arr) {
        if (arr == null || arr.length < 2) {
            // 考虑边界情况,数组为空或者长度小于2,则不用排序
            return;
        }
        int n = arr.length;
        for (int i = 0; i < n; i++) {
            // 最小值所在下标
            int currentMinIndex = i;
            for (int j = i + 1; j < n; j++) {
                // 查找最小值所在下标
                currentMinIndex = arr[j] < arr[currentMinIndex] ? j : currentMinIndex;
            }
            int temp = arr[i];
            arr[i] = arr[currentMinIndex];
            arr[currentMinIndex] = temp;
        }
    }

    public static void printArr(int[] arr) {
        for (int j : arr) {
            System.out.print(j + " ");
        }
        System.out.println();
    }

    public static void main(String[] args) {
        int[] arr = {5, 1, 6, 11, 10, 9, 45, 1, 6, 7, 9, 12};
        printArr(arr);
        selectSort(arr);
        printArr(arr);
    }

}

输出结果

5 1 6 11 10 9 45 1 6 7 9 12 
1 1 5 6 6 7 9 9 10 11 12 45 
最后修改:2024 年 01 月 04 日
如果觉得我的文章对你有用,请随意赞赏