选择排序

func main(){
	a := []int{1, 9, 2, 8, 3, 7, 4, 6, 5, 10}
	for i:=0;i<len(a)-1;i++{
		max := i
		for j:=i+1;j<len(a);j++{
			if a[j] > a[max]{
				max = j
			}
		}
		a[i],a[max] = a[max],a[i]
	}
	fmt.Println(a)
}

        1 9 2 8 3  7 4  6 5 10

10         9 2 8 3  7 4  6 5 1   (注意10 和1是位置做交换)

10 9      2 8 3  7 4  6 5 1

10 9 8    2 3  7 4  6 5 1    (2和8位置做交换)

10 9 8 7   3 2 4  6 5 1       (7和2位置做交换)

…………………………

第一遍

在切片a中选取一个最大值,和下标0做交换,

第二遍

在切片剩余的元素中再选取一个最大值,和下标1做交换,

………………

以此对切片a进行排序。

 

外层for循环用作循环下标的,因为如果切片中n-1一个元素都排列完后,切片就已经有序最后一个元素不用做交换,所以下标 i <len(a) -1,

内层for循环是循环切片剩余的元素,第一个元素取出放在下标0的位置后,第二遍循环只需要循环下标 [1,len(a)) .

因为在开始内层循环前我们已经取出了下标 i,所以内层循环只需要循环剩下的 【i+1,len(a))

posted on 2020-05-21 09:11  thotf  阅读(87)  评论(0)    收藏  举报

导航