原理:将需要排序的数组元素大小转化为相应的休眠时间,同时加载到sleep中,按大小打印从而实现排序。
package main
import (
"time"
"fmt"
)
var flag bool
var container chan bool
var count = 0
func main() {
var array[]int = []int{0, 8, 1, 5, 9}
flag = true
container = make(chan bool, len(array)) // 5个管道
for i:=0; i<len(array); i++ {
go toSleep(array[i])
}
go listen(len(array))
for flag { // 等待打印完成结束主程序
time.Sleep(1 * time.Millisecond)
}
}
// 监听程序,打印完将flage变为false,结束主函数等待
func listen(size int) {
for flag{
select {
case <- container:
count++
if count >= size { // 排序打印完成退出
flag = false
break
}
}
}
}
// 休眠打印
func toSleep(data int) {
time.Sleep(time.Duration(data) * time.Second) // 休眠
fmt.Println(data) // 打印休眠的秒数
container <- true
}
网友评论