一千万个随机数排序,如何24秒蜕变成3秒?如何从700M内存消耗变成200M?

一千万个随机数排序,如何24秒蜕变成3秒?如何从700M内存消耗变成200M?,第1张

概述上一篇文章写的十分的烂,经过科普看语言源码实现用的是quicksort实现的底层排序,在这里模仿一下,勿喷! package mainimport ( "fmt" "math/rand" "runtime" "sort" "time")func mergeonce(l, r []int) []int { m := make([]int, 0, len(l)+len(r))
上一篇文章写的十分的烂,经过科普看语言源码实现用的是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?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1287515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存