美文网首页算法
5.休眠排序

5.休眠排序

作者: 发条家的橙子 | 来源:发表于2019-08-18 00:05 被阅读0次

    原理:将需要排序的数组元素大小转化为相应的休眠时间,同时加载到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
    }
    

    相关文章

      网友评论

        本文标题:5.休眠排序

        本文链接:https://www.haomeiwen.com/subject/hnylsctx.html