Go语言排序一千万个随机数.开的双核.用了120秒,不知道怎么优化.然后自己调整了一下参数跑了一下34秒

fyxichen · · 1804 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

自己没事调整了一下参数,然后从新跑了一下,时间缩短为34秒,结果还可以.
package main

import (
	"fmt"
	"os"
	"runtime"
	"test"
	"time"
)

var x chan []int = make(chan []int, 1)
var Num int = 10 //改为100
var WNum int = 100

func main() {
	fmt.Println(time.Now())
	var list1, list2 []int
	var R chan []int = make(chan []int, 1)
	for i := 0; i < WNum; i++ {
		go Chan(Num, R)
	}
	for i := 0; i < WNum; i++ {
		select {
		case y := <-R:
			if len(list1) == 0 {
				list1 = y
			} else {
				list2 = y
				list1 = test.Merge(list1, list2)
			}
		}
	}
	fmt.Println(time.Now())
	fmt.Println(len(list1))
	File, _ := os.OpenFile("c.txt", os.O_RDWR|os.O_CREATE, 0777)
	File.Write([]byte(fmt.Sprint(list1)))
	File.Close()
}

func Chan(Num int, R chan []int) {
	var list1, list2 []int
	runtime.GOMAXPROCS(2)
	for i := 0; i < Num; i++ {
		go func() {
			x <- test.Rand_list(10000)  <span style="font-family: Arial, Helvetica, sans-serif;">//改为1000</span>
		}()
	}
	for i := 0; i < Num; i++ {
		select {
		case y := <-x:
			if len(list1) == 0 {
				list1 = y
			} else {
				list2 = y
				list1 = test.Merge(list1, list2)
			}
		}
	}
	R <- list1
}
目录:test下

package test

import (
	"math/rand"
)

func Rand_list(Num int) []int {
	var list []int
	for i := 0; i < Num; i++ {
		list = append(list, rand.Intn(100000)) 
	}
	for i := 0; i < Num; i++ {
		for j := i + 1; j < Num; j++ {
			if list[i] > list[j] {
				list[i], list[j] = list[j], list[i]
			}
		}
	}
	return list
}

package test

func Merge(list1, list2 []int) []int {
	list1_Num := len(list1)
	list2_Num := len(list2)
	var j int = 0
	var list3 []int
	for i, _ := range list1 {
	This:
		if list1[i] <= list2[j] {
			list3 = append(list3, list1[i])
			if i == list1_Num-1 {
				for z := j; z < list2_Num; z++ {
					list3 = append(list3, list2[z])
				}
				break
			}
		} else {
			if j <= list2_Num-1 {
				list3 = append(list3, list2[j])
				if j == list2_Num-1 {
					for j := i; j < list1_Num; j++ {
						list3 = append(list3, list1[j])
					}
					break
				}
				j++
				goto This
			}
		}
	}
	return list3
}




有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1804 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传