算法一直是我的弱项,直接硬上力扣,知其然而不知其所以然,于是乎,花点时间,从最基础的开始。
选择排序,应该没有比他更为基础的吧。
选择排序,顾名思义,就是每次选择最小的值,然后进行交换。
图解
如有一个 [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)