Golang写的并行排序算法
时间:2022-05-04
本文章向大家介绍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)
}
}
- CentOS 7.2下安装Mono 5.0
- ROR学习笔记(1):Rails 2快速创建GRUD应用
- API网关Ocelot 使用Polly 处理部分失败问题
- 使用GoogleAPI加载各种js框架
- Docker容器学习梳理--日常操作总结
- 马化腾:通向互联网未来的七个路标
- jQuery扩展以及gzip压缩测试
- python2.6升级到3.3.0 的操作记录
- 由javascript中"匿名函数调用写法"引出的一些东东
- javascript中定义私有方法(private method)
- python升级后带来的几个小问题
- 分布式监控系统Zabbix-3.0.3-完整安装记录(1)
- centos6.8下安装部署LNMP-(nginx1.8.0+php5.6.10+mysql5.6.12)
- IE7下当position:fixed遇到text-align:center
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 我在暴躁同事小张的胁迫下学会了Go的交叉编译和条件编译
- LoRa终端设备ASR6505之PingPong通信
- LoRa点对点通信,OLED显示(内附代码)
- 08 . Python3高阶函数之迭代器、装饰器
- redis源码之SDS
- 01 . Tomcat简介及多实例部署
- 学练结合,快速掌握Kubernetes Service
- arraylist linkedlist vector
- Java的HashMap和HashTable
- 花木兰到底好看不,我用Python爬取了几万条评论!
- java方法重载
- java中super()和this()浅析
- 常见的 Spring 注解概览
- java中 this和super的区别
- Java常用API(ArrayList类)