go排序-睡眠排序

package main

import (
        "fmt"
        "math/rand"
        "sync"
        "time"
)

func Sleep(arr ...int) (orders []int) {
        var wg sync.WaitGroup
        ch := make(chan int, len(arr))
        for _, item := range arr {
                wg.Add(1)
                go func(sleepTime int) {
                        defer wg.Done()
                        time.Sleep(time.Duration(int64(sleepTime) * time.Hour.Milliseconds()))
                        ch <- sleepTime
                }(item)
        }
        wg.Wait()
        close(ch)
        for item := range ch {
                orders = append(orders, item)
        }
        return
}

func main() {
        var theArray = []int{-1,10, 1, 18, 30, 23, 12, 7, 5, 18, 14}

        r := rand.New(rand.NewSource(time.Now().UnixNano()))
        for i:=0; i<100000; i++ {
                theArray = append(theArray, r.Intn(1000))
        }

        fmt.Print("排序前")
        //fmt.Println(theArray)
        fmt.Print("排序后")
        _ = Sleep(theArray...)
        //fmt.Println(res)

}

  

没什么卵用 数字大就慢的要死