前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Golang写的并行排序算法

Golang写的并行排序算法

作者头像
李海彬
发布2018-03-19 15:47:27
1.2K0
发布2018-03-19 15:47:27
举报
文章被收录于专栏:Golang语言社区Golang语言社区
代码语言:javascript
复制
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)

    }

}
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-01-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Golang语言社区 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档