原理
从待排序的数据元素中选出最小或最大的一个元素,存放在序列的起始位置,然后再从剩余的元素中寻找最小或最大的元素,再放到已排序的序列末尾。以此类推,直到待排序元素个数为零。复杂度O(N^2)
代码实现(最小元素)
核心:1.极值元素的寻找 2.添加极值元素到已排序序列 3.已寻找到的极值去除
通过两个函数实现
函数findSmallest () 找到最小的元素,并返回
函数selectionSort()将最小的元素添加到result切片中(排序序列)
package main
import "fmt"
func main() {
arr := []int{5, 7, 1, 8, 3, 2, 6, 4, 9}
arr = selectionSort(arr)
fmt.Println(arr)
}
func findSmallest (arr []int) int {
smallest := arr[0]
smallest_index :=0
for i:=0;i<len(arr);i++{
if arr[i] < smallest {
smallest = arr[i]
smallest_index = i
}
}
return smallest_index
}
func selectionSort(arr []int) []int {
result := []int{}
count := len(arr)
for i:= 0;i<count;i++ {
smallest_index:= findSmallest(arr)
result = append(result,arr[smallest_index] )
arr = append(arr[:smallest_index],arr[smallest_index+1:]... ) // 去除arr 中已排序的元素
}
return result
}
结果
[1 2 3 4 5 6 7 8 9]