[算法初步]之简单选择排序

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

posted @ 2013-04-16 22:58  零界寒冰  阅读(128)  评论(0编辑  收藏  举报