前面我们讲解了什么是鸽巢排序,现在我们看一下代码,看看使用go如何实现
package main
import "fmt"
//鸽巢排序
func pigeonholeSort(theArray []int) {
//获取最大值vl
vl := 0;
for _,v:=range theArray{
if v>vl{
vl = v
}
}
//因为go中不能使用变量作为数组的定义长度,所以使用了切片
slice := make([]int, vl+1)
for _,v:=range theArray{
slice[v]++
}
for i:= range slice{
if slice[i]!=0{
fmt.Print(i)
fmt.Print(" ")
}
}
}
func main() {
var theArray = []int{1,0,2,10,9,70,5,6,3}
fmt.Print("排序前")
fmt.Println(theArray)
fmt.Print("排序后")
pigeonholeSort(theArray)
}
我们执行下代码,看下结果
排序前[1 0 2 10 9 70 5 6 3]
排序后0 1 2 3 5 6 9 10 70
符合预期