go快排

func Quicksort(data []int) []int {
	if len(data)<=1 {
		return data
	}
	var max,min  []int
	middle:=data[0]
	// 等待goroutine都运行完毕
	var WG sync.WaitGroup

	for index,value:=range data{
		if index==0 {
			continue
		}
		if value>middle{
			max=append(max,value )
		}else{
			min=append(min,value)
		}
	}
	// 
	WG.Add(2)
	go func() {
		max=Quicksort(max)
		WG.Done()
	}()
	go func() {
		min=Quicksort(min)
		WG.Done()
	}()
	WG.Wait()

	list:=[]int{middle}
	if len(max)>0 {
		list= append(list,max...)
	}
	if len(min) >0{
		list=append(min,list... )

	}
	return list
}

func main() {
	data:=[]int{1,3,4,2,55,8,6,52,55}
	fmt.Println(Quicksort(data))
}
[1 2 3 4 6 8 52 55 55]

WaitGroup 对象内部有一个计数器,最初从0开始,它有三个方法:Add(), Done(), Wait() 用来控制计数器的数量。Add(n) 把计数器设置为n ,Done() 每次把计数器-1 ,wait() 会阻塞代码的运行,直到计数器地值减为0。
WaitGroup对象不是一个引用类型,在通过函数传值的时候需要使用地址

一定要通过指针传值,不然进程会进入死锁状态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值