如何修复go中的并发合并排序
我正在尝试学习go-lang,同时在实现合并排序时面临问题。它没有正确排序数组 我尝试过寻找任何比赛条件,也尝试过在不同阶段打印。但似乎无法解决问题。任何分析和指出此类问题的工具如何修复go中的并发合并排序,go,concurrency,mergesort,Go,Concurrency,Mergesort,我正在尝试学习go-lang,同时在实现合并排序时面临问题。它没有正确排序数组 我尝试过寻找任何比赛条件,也尝试过在不同阶段打印。但似乎无法解决问题。任何分析和指出此类问题的工具 主程序包 进口( “fmt” “时间” ) func合并(a[]整数,ch chan整数){ //延迟关闭(ch) 如果len(a)==0{ 关闭(ch) 返回 } 如果len(a)==1{ ch您的合并阶段被打破:您必须发送ch中ch1和ch2中的所有值,但是一旦ch1或ch2中的任何一个被耗尽,您的代码就会停止。一
主程序包
进口(
“fmt”
“时间”
)
func合并(a[]整数,ch chan整数){
//延迟关闭(ch)
如果len(a)==0{
关闭(ch)
返回
}
如果len(a)==1{
ch您的合并阶段被打破:您必须发送ch
中ch1
和ch2
中的所有值,但是一旦ch1
或ch2
中的任何一个被耗尽,您的代码就会停止。一旦您被耗尽,例如ch2
您就必须将ch1
中的所有内容发送到c
一些东西(一定要清理环境!)
用于ok1 | | ok2的{
if(ok1&&ok2&&v1for ok1 || ok2 {
if (ok1 && ok2 && v1 < v2) || (ok1 && !ok2) {
ch <- v1
v1, ok1 = <-ch1
} else if (ok1 && ok2 && v1 >= v2) || (!ok1 && ok2) {
ch <- v2
v2, ok2 = <-ch2
}
}