package main
import (
"fmt"
"math/rand"
"time"
)
// bubbl 冒泡排序
func bubbl(list []int, t int, ch chan int) {
for i := len(list) - 1; i > 0; i-- {
for j := 0; j < i; j++ {
if t == 1 && list[j] > list[j+1] {
list[j], list[j+1] = list[j+1], list[j]
}
if t == 2 && list[j] < list[j+1] {
list[j], list[j+1] = list[j+1], list[j]
}
}
}
fmt.Println(list)
//通知主协程已完成
ch <- 1
}
// isoscelesTriangle 生成一个等腰三角
func isoscelesTriangle(num int) {
fmt.Println("三角形的行数:", num)
//睡一秒看效果
time.Sleep(1 * time.Second)
// 标记行数
for i := 1; i <= num; i++ {
// 打印前面的空格
for k := 1; k <= num-i; k++ {
fmt.Print(" ")
}
// 打印每行星号
for j := 1; j <= 2*i-1; j++ {
fmt.Print("*")
}
fmt.Println() // 作用:每行打印完毕换行
}
}
func main() {
//新建一个没有缓冲的管道
ch := make(chan int)
//随机生成
list := []int{}
for i := 10; i > 0; i-- {
list = append(list, rand.Intn(999))
}
//1是升序 2是降序
go bubbl(list, 1, ch)
fmt.Println("等会会有1s延迟时间")
isoscelesTriangle(len(list))
//从空缓冲的信道读取int,将会堵塞,知道有消息到来
_ = <-ch
fmt.Println("打印完成")
}
运行后效果: