##1 说明
简单选择排序不用多说,也是属于一种选择排序。
##2 场景:
小学时候出操时候,老师都要求小学生按高矮站成一排。但是明显的小学生们没那么有意识,站成的队伍还是很混乱的。
这个时候就只能由老师亲自出马进行排序了,比如一行队伍:
* [3, 5, 1, 7, 6, 2, 11, 13, 4]
老师认为前排站的肯定是最矮的同学,因此老师先把3号同学定义为最矮的同学。然后在此基础上调整。
* [3, 5, 1, 7, 6, 2, 11, 13, 4] (标记3号最矮)
结果老师往后走了一圈,发现后面的1号同学才应该是标记为最矮的,直接拉出来3号和1号交换位置。
* 已排序[1] 未排序[5, 3, 7, 6, 2, 11, 13, 4] (标记换到1号,交换3和1)
1号位置不担心了,然后老师继续重复上面的方法。将第二位置的5号同学定义为最矮,结果在后面又找到了3号同学更矮,两者交换。
* 已排序[1,3] 未排序 [5, 7, 6, 2, 11, 13, 4] (标记换到3号,交换5和3)
这样一直排序,直到最后一个同学。排完了就可以做操了。
* [1, 2, 3, 4, 5, 6, 7, 11, 13]
##go语言实现
package main
import "fmt"
/*
* [简单选择排序]场景:
* 1 左边人的队列认为已经排好序(i),右边人的队列未排好的(N-i)。
* 2 以左边第一个人为最矮小标记,查出最矮小的人。
* 3 左边的人和最矮的人交换位置。
* 4 重复步骤2,循环N-1次,直到到最后一个人为止。
*/
func SelectSort(data *[9]int) {
var min int
for i := 0; i < len(data)-1; i++ {
min = i
// 查出最小值位置
for j := i + 1; j < len(data); j++ {
if data[j] < data[min] {
min = j
}
}
// 交换左边值和最小值
data[i], data[min] = data[min], data[i]
}
}
func main() {
data := [9]int{5, 1, 3, 7, 6, 2, 11, 13, 4}
SelectSort(&data)
for x := 0; x < len(data); x++ {
fmt.Print(data[x], ",")
}
}