选择排序系列

miloyang
0 评论
/ /
523 阅读
/
927 字
05 2023-07

算法一直是我的弱项,直接硬上力扣,知其然而不知其所以然,于是乎,花点时间,从最基础的开始。
选择排序,应该没有比他更为基础的吧。

选择排序,顾名思义,就是每次选择最小的值,然后进行交换。

图解

如有一个 [20,12,24,3,18] 的数组,我们使用选择排序的方式进行排序,步骤如下图:
选择排序过程图示

代码

func SelectorSort(arr []int) {
    if len(arr) < 2 {
        return
    }
    // 倒数第二次的排序,肯定会把最大的值放到最后面去了,所以只需要循环len-1次即可
    for i := 0; i < len(arr)-1; i++ {
        minIndex := i                       //假设每次循环都是最小的下标
        for j := i + 1; j < len(arr); j++ { // 因为是前面的和后面的比,所以j从i+1开始就可以
            if arr[minIndex] > arr[j] {
                minIndex = j // 找到比当前小的变量,把下标赋值
            }
        }
        if i != minIndex {
            arr[minIndex], arr[i] = arr[i], arr[minIndex] // go语言的特性,直接交换即可,其他语言还需要写temp变量
        }
    }
}

时间复杂度为 O(N^2)

人未眠
工作数十年
脚步未曾歇,学习未曾停
乍回首
路程虽丰富,知识未记录
   借此博客,与之共进步