选择排序

150 阅读1分钟

1.思路:每次遍历数组未排序部分选出最小值(最大值),与未排序部分的第一个元素交换。

2.图解:对数组[4, 5, 6, 3, 2, 1]进行选择排序,每次交换详细过程如下图所示:

image.png

3.代码实现:

public void selectSort (int[] arr) {
        if (arr == null || arr.length < 2) {
            return;
        }
       
        for (int i = 0; i < arr.length - 1; i++) {
            // 假定最小值的下标为i
            int min = i;   
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j] < arr[min]) {
                    // 改变最小值的下标
                    min = j;   
                }
            }
            // 交换
            int temp = arr[i];
            arr[i] = arr[min];
            arr[min] = temp;
        }
    }

4.性质: ①时间复杂度:O(n^2)     ②空间复杂度:O(1)    ③原地排序
④非稳定排序:对于数组[4,5,4,6,1],第一次遍历时,会将第一个4和最后的1交换位置,那第一个4和第二个4的顺序就改变了,所以是非稳定排序。