Golang写的并行排序算法------Golang语言社区

在这里插入图片描述

package main
import "fmt"

// threads 线程标识创建线程的个数
func quicksort(nums []int, ch chan int, level int, threads int) {
	level=level*2
	if len(nums) == 1 {
			ch<- nums[0]; close(ch); return //ch<-nums[0] 表示将nums[0] 数据写到ch通道中
		}
	if len(nums) == 0 { 
			close(ch); return
	}

	less := make([]int, 0)//
	greater := make([]int,0)
	left := nums[0] //快速排序的轴
	nums = nums[1:] 

	//从左向右扫描数据 大于轴的放到greater里小于的放到less中
	for _,num_data := range nums{
		switch{
			case num_data <= left:
			less = append(less,num_data) 
			case num_data > left:
			greater = append(greater,num_data)
		}
	}

	left_ch := make(chan int, len(less)) 
	right_ch := make(chan int, len(greater))

	if(level <= threads){
		go quicksort(less, left_ch, level, threads) //分任务
		go quicksort(greater,right_ch, level, threads)
	}else{
		quicksort(less,left_ch, level, threads)
		quicksort(greater,right_ch, level, threads)
	}

	//合并数据
	for i := range left_ch{
		ch<-i;
	}
	ch<-left
	for i := range right_ch{
		ch<-i;
	}
	close(ch)
	return
}

func main() {
	x := []int{3, 1, 4, 1, 5, 9, 2, 6}
	ch := make(chan int)
	go quicksort(x, ch, 0, 0) // 0 0 表示不限制线程个数
	for v := range(ch) {
		fmt.Println(v)
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值