# 算法

输入 n 个整数,对于每个值为 k 的数建立一个线程,每个线程 k 秒后通过 channel 传出这个数到一个数组,所有线程结束后,输出这个数组。

# 代码

package main
import (
	"fmt"
	"time"
)
func num_sleep(sec int, c chan int) {
	time.Sleep(time.Second * time.Duration(sec))
	c <- sec
}
func main() {
	var n int
	var data int
	var arr []int
	fmt.Println("输入数据规模:")
	fmt.Scanln(&n)
	fmt.Println("输入数据:")
	for i := 0; i < n; i++ {
		fmt.Scanf("%d", &data)
		arr = append(arr, data)
	}
	c := make(chan int, n)
	for _, num := range arr {
		go num_sleep(num, c)
	}
	var res []int
	for i := 0; i < n; i++ {
		res = append(res, <-c)
	}
	close(c)
	fmt.Println("排序结果:")
	fmt.Println(res)
}

# 测试

输入数据规模:
10
输入数据:
8 6 3 7 10 2 5 1 9 4
排序结果:
[1 2 3 4 5 6 7 8 9 10]

数据过大排序时间很长,比如 [86400 2 1] 会排一天。
数据规模过大,数据之间差距过小又会导致排序出错,内核进程调度需要时间,不能保证所有进程同时启动。
这个算法时间复杂度无意义。

更新于