mirror of
https://github.com/teivah/100-go-mistakes.git
synced 2026-06-25 19:06:58 +08:00
Reviews
This commit is contained in:
parent
f3f5d06bcf
commit
ab22488bb0
1 changed files with 45 additions and 37 deletions
|
|
@ -1,18 +1,25 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import "sync"
|
import (
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
func sequentialMergesort(s []int) {
|
func sequentialMergesort(s []int) {
|
||||||
if len(s) > 1 {
|
if len(s) <= 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
middle := len(s) / 2
|
middle := len(s) / 2
|
||||||
sequentialMergesort(s[:middle])
|
sequentialMergesort(s[:middle])
|
||||||
sequentialMergesort(s[middle:])
|
sequentialMergesort(s[middle:])
|
||||||
merge(s, middle)
|
merge(s, middle)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
func parallelMergesortV1(s []int) {
|
func parallelMergesortV1(s []int) {
|
||||||
if len(s) > 1 {
|
if len(s) <= 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
middle := len(s) / 2
|
middle := len(s) / 2
|
||||||
|
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
|
|
@ -31,12 +38,14 @@ func parallelMergesortV1(s []int) {
|
||||||
wg.Wait()
|
wg.Wait()
|
||||||
merge(s, middle)
|
merge(s, middle)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const max = 2048
|
const max = 2048
|
||||||
|
|
||||||
func parallelMergesortV2(s []int) {
|
func parallelMergesortV2(s []int) {
|
||||||
if len(s) > 1 {
|
if len(s) <= 1 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if len(s) <= max {
|
if len(s) <= max {
|
||||||
sequentialMergesort(s)
|
sequentialMergesort(s)
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -59,7 +68,6 @@ func parallelMergesortV2(s []int) {
|
||||||
merge(s, middle)
|
merge(s, middle)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
func merge(s []int, middle int) {
|
func merge(s []int, middle int) {
|
||||||
helper := make([]int, len(s))
|
helper := make([]int, len(s))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue