上一篇文章写的十分的烂,经过科普看语言源码实现用的是quicksort实现的底层排序,在这里模仿一下,勿喷!
package mainimport ( "fmt" "math/rand" "runtime" "sort" "time")func mergeonce(l,r []int) []int { m := make([]int,len(l)+len(r)) i,j := 0,0 if i < len(l) && j < len(r) { for { if l[i] < l[j] { m = append(m,l[i]) i++ if i == len(l) { break } } else { m = append(m,l[j]) j++ if j == len(r) { break } } } } m = append(append(m,l[i:]...),r[j:]...) return m}func merge(in chan []int,out chan []int) { var next chan []int var l []int for List := range in { if l == nil { l = List continue } r := List if next == nil { next = make(chan []int,1) go merge(next,out) } next <- mergeonce(l,r) l = nil } if next == nil { out <- l } else { if l != nil { next <- l } close(next) }}func main() { runtime.GOMAXPROCS(2) ch := make(chan []int,1) const Num = 100 const WNum = 100 fmt.Println(time.Now()) go func(n int,out chan []int) { for i := 0; i < n; i++ { List := make([]int,1000) for j := range List { List[j] = rand.Int() } sort.Ints(List) out <- List } close(out) }(Num*WNum,ch) out := make(chan []int) go merge(ch,out) List := <-out fmt.Println(time.Now()) fmt.Println(len(List)) fmt.Println(sort.IntsAreSorted(List))}总结
以上是内存溢出为你收集整理的一千万个随机数排序,如何24秒蜕变成3秒?如何从700M内存消耗变成200M?全部内容,希望文章能够帮你解决一千万个随机数排序,如何24秒蜕变成3秒?如何从700M内存消耗变成200M?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)