原理
遍历所有元素,找到最小的元素,把最小元素交换到指定位置,然后在遍历剩余的元素,查找最小元素并交换,直到最后一个元素
特点:
- 运行时间和输入的顺序无关。因为每次查找最小元素都要遍历剩余的所有元素,无论输入的顺序如何
- 交换次数最少。因为每次交换,都是把最小元素交换到最终位置,所以交换次数最少
时间复杂度:O(n2)
空间复杂度:O(1)
实现
// 定义接口
type Comparable interface {
CompareTo(interface{}) int
}
// 定义类型并实现接口
type Int int
func (i Int) CompareTo(i2 interface{}) int {
i2tmp := int(i2.(Int))
iTmp := int(i)
if iTmp > i2tmp {
return 1
} else if iTmp < i2tmp {
return -1
} else {
return 0
}
}
// 选择排序
// s : 输入
// flag : true-从小到大,false-从大到小
// return:输出
func SelectSort(s []Int,flag bool) []Int {
l := len(s)
for i := 0; i < l; i++ {
min := i
for j := i + 1; j < l; j++ {
if flag && s[j].CompareTo(s[min]) < 0 || !flag && s[j].CompareTo(s[min]) > 0 {
min = j
}
}
if min != i {
s[i],s[min] = s[min],s[i]
}
}
return s
}