# 算法
输入 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] 会排一天。
数据规模过大,数据之间差距过小又会导致排序出错,内核进程调度需要时间,不能保证所有进程同时启动。
这个算法时间复杂度无意义。