选择排序就是不断地从未排序的元素中选择最大(或者最下)的元素放入已经排好序的元素集合中,直到未排序中仅剩一个元素为止。知识内容参考《算法图解》P25-28.
package main
import (
"fmt"
"math"
)
/*
找出切片中最小值的索引,并将其返回
*/
func findSmaller(arr []int) int {
var min int = 0
for i := 1; i < len(arr); i++ {
if arr[min] > arr[i] {
min = i
}
}
return min
}
func SelectionSort(arr []int) []int {
var newArr []int
//最大可能需要找切片长度次数
for i := 0; i < len(arr); i++ {
//找出切片最小值的索引
index := findSmaller(arr)
//为新的切片添加内容
newArr = append(newArr, arr[index])
arr[index] = math.MaxInt64 //可以看成是清除切片中的元素(无穷大值)
}
//返回排序好的切片
return newArr
}
func main() {
arr := []int{12, 4, 5, 17, 84, 8, 9, 1, 7, 666, 333, 888}
//fmt.Println(arr)
fmt.Println(SelectionSort(arr))
}