选择排序
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))
浙公网安备 33010602011771号