1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| package main
import ( "fmt" "sync" "time"
"golang.org/x/exp/constraints" )
func main() { arr1 := []int{11, 23, 55, 6, 3, 3, 22, 2, 1, 0} fmt.Println(sleepSort(arr1))
arr2 := []float32{2.1, 3.2, 3.1, 3.002, 4.1, 2} fmt.Println(sleepSort(arr2)) }
func sleepSort[T constraints.Float | constraints.Integer](arr []T) []T { var res []T ch := make(chan T, len(arr)) var wg sync.WaitGroup for _, n := range arr { wg.Add(1) go func(i T) { time.Sleep(time.Duration(float64(i) * float64(time.Millisecond))) ch <- i wg.Done() }(n) } wg.Wait() close(ch) for n := range ch { res = append(res, n) } return res }
|