选择排序:每一轮迭代选择出一个最小的数,然后做一次交换元素。不用像冒泡排序那样需要交换元素那么频繁。不过也是效率比较槽糕。
原理介绍:
{4,7,3,10,1,8,19}
第一轮迭代,从第一个数开始,左边到右边进行扫描,找到最小的数 1,与数列里的第一个数交换位置。
第二轮迭代,从第二个数开始,左边到右边进行扫描,找到第二小的数 3,与数列里的第二个数交换位置。
第三轮迭代,从第三个数开始,左边到右边进行扫描,找到第三小的数 4,与数列里的第三个数交换位置。
第N轮迭代:....
下图显示:
网络图片
代码:
package main
import (
"fmt"
)
func main() {
var nums = []int{4, 2, 10, 3, 188, 43, 19, 1, 80, 24, 30}
BubbleSort(nums)
fmt.Println(nums)
}
func BubbleSort(list []int) {
listLen := len(list)
for i := 0; i < listLen-1; i++ {
min := list[i]
minIndex := i
for j := i + 1; j < listLen; j++ {
if list[j] < min {
min = list[j]
minIndex = j
}
}
if i != minIndex {
list[i], list[minIndex] = list[minIndex], list[i]
}
}
}
算法可以做改进:每次扫描的时候,不仅找出最小的数,同时也找出最大的数。这样效率提高一倍。