This commit is contained in:
teivah 2022-02-05 14:07:04 +01:00
parent f3f5d06bcf
commit ab22488bb0
No known key found for this signature in database
GPG key ID: 07E4A13FB8F8DF63

View file

@ -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))