Go基于协程的归并排序简单实现
归并排序这个可能很多人都不知道,今天用Go语言简单的实现下,其他语言可能要基于线程来实现。
//产生一个源
func ArraySource(a ...int) chan int{
out :=make(chan int)
go func(){
for _,v:=range a{
out <- v
}
close(out)
}()
return out
}
//进行排序
func InMemSort(in <- chan int) <-chan int {
out := make(chan int)
go func(){
var a []int
for v:=range in{
a = append(a,v)
}
sort.Ints(a)
for _,v := range a{
out <- v
}
close(out)
}()
return out
}
//合并
func Merge(in1,in2 <- chan int) <-chan int{
out := make(chan int)
go func(){
v1,ok1 := <- in1
v2,ok2 := <- in2
for ok1 || ok2 {
if !ok2 || (ok1 && v1 <= v2){
out <- v1
v1,ok1 = <- in1
}else{
out <- v2
v2,ok2 = <- in2
}
}
close(out)
}()
return out
}
/**
归并排序
*/
func main(){
p := Merge(InMemSort(ArraySource(23,22)),InMemSort(ArraySource(27,100,200,23,1,22)))
for v := range p{
fmt.Println(v)
}
}
有问题可以在下面评论,技术问题可以私聊我

Go基于协程的归并排序简单实现的更多相关文章
- Python实现基于协程的异步爬虫
一.课程介绍 1. 课程来源 本课程核心部分来自<500 lines or less>项目,作者是来自 MongoDB 的工程师 A. Jesse Jiryu Davis 与 Python ...
- python基于协程的网络库gevent、eventlet
python网络库也有了基于协程的实现,比较著名的是 gevent.eventlet 它两之间的关系可以参照 Comparing gevent to eventlet, 本文主要简单介绍一下event ...
- lua:写了个基于协程的task调度库
写了一个(不完整的)基于协程的task调度库 sample code如下 my_spawn( function () print('f: 1') local t1 = my_spawn( functi ...
- 发布一个基于协程和事件循环的c++网络库
目录 介绍 使用 性能 实现 日志库 协程 协程调度 定时器 Hook RPC实现 项目地址:https://github.com/gatsbyd/melon 介绍 开发服务端程序的一个基本任务是处理 ...
- 基于协程的Python网络库gevent
import gevent def test1(): print 12 gevent.sleep(0) print 34 def test2(): print 56 gevent.sleep(0) p ...
- 【Unity笔记】协程Coroutine的简单优化
一个最简单的协程,也至少需要2帧才能完成.第一帧走到yield return null停止,第二帧从此处接着执行完下面的操作.需求:如果缓存中存在某数据则直接使用,否则联网异步下载. private ...
- lua协程并发下载简单测试
下载8个1m大小文件,测试五次分别耗时12.038s,10.316s,8.955s,11.275s,9.499s(lua代码实现如下) require "socket" --hos ...
- 基于ASIO的协程库orchid简介
什么是orchid? orchid是一个构建于boost库基础上的C++库,类似于python下的gevent/eventlet,为用户提供基于协程的并发模型. 什么是协程: 协程,即协作式程序,其思 ...
- python 并发编程 基于gevent模块 协程池 实现并发的套接字通信
基于协程池 实现并发的套接字通信 客户端: from socket import * client = socket(AF_INET, SOCK_STREAM) client.connect(('12 ...
随机推荐
- IDEA添加作者注释
1.打开IDEA的settings,然后在Editor下找到File and Code Templates 2.然后选择File Header 选择需要注释的的格式即可.
- apache移植
我下载的是httpd-2.2.9.tar.gz 1. 解压httpd-2.2.9.tar.gz到/mnt/apps目录下.tar -zxvf httpd-2.2.9.tar.gz 2. 建立与http ...
- Maven+mybatis教程
首先,配置maven 在eclipse中把maven路径和settings.xml文件配置好之后,否则后续会有一些问题 可以设一个环境变量M2_HOME指向你的maven安装目录 M2_HOME=G: ...
- Nexus搭建Maven私有仓库
原文:http://blog.csdn.net/rickyit/article/details/54927101 前言 Nexus Repository Manager is a Javaapplic ...
- JUNIT -- springMVC的action进行单元测试
原文:http://blog.csdn.net/gaopeng0071/article/details/49946575 我开发环境springMVC版本3.0.4 样例代码: package com ...
- 以Java属性文件的格式创建Hibernate的配置文件和DTD特殊符号作用
演示样例代码 hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.connection.driver_class=com.my ...
- 升级iOS 9之前的注意事项
iOS 9 beta刚刚公布.就下载了官网的升级包, 使用itunes的更新功能,升级 眼看安装过程一番顺利, 升级完開始进入设置操作步骤上, 结果傻眼了 进入了输入手机password的界面, 不 ...
- Redis入门教程(三)— Java中操作Redis
在Redis的官网上,我们可以看到Redis的Java客户端众多 其中,Jedis是Redis官方推荐,也是使用用户最多的Java客户端. 开始前的准备 使用jedis使用到的jedis-2.1.0. ...
- windows内存管理的机制以及优缺点
分页存储管理基本思想:用户程序的地址空间被划分成若干固定大小的区域,称为“页”,相应地,内存空间分成若干个物理块,页和块的大小相等.可将用户程序的任一页放在内存的任一块中,实现了离散分配. 分段存储管 ...
- .NET的委托和匿名函数应用一例
闲话休提,大家都是成年人,直接上代码.有代码有J8: delegate string dlgGetTotal(); void TongJi() { dlgGetTotal getTotalInt = ...