##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], ",") } }