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,54 @@
package main
import "sync"
import (
"sync"
)
func sequentialMergesort(s []int) {
if len(s) > 1 {
middle := len(s) / 2
sequentialMergesort(s[:middle])
sequentialMergesort(s[middle:])
merge(s, middle)
if len(s) <= 1 {
return
}
middle := len(s) / 2
sequentialMergesort(s[:middle])
sequentialMergesort(s[middle:])
merge(s, middle)
}
func parallelMergesortV1(s []int) {
if len(s) > 1 {
if len(s) <= 1 {
return
}
middle := len(s) / 2
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
parallelMergesortV1(s[:middle])
}()
go func() {
defer wg.Done()
parallelMergesortV1(s[middle:])
}()
wg.Wait()
merge(s, middle)
}
const max = 2048
func parallelMergesortV2(s []int) {
if len(s) <= 1 {
return
}
if len(s) <= max {
sequentialMergesort(s)
} else {
middle := len(s) / 2
var wg sync.WaitGroup
@ -20,12 +56,12 @@ func parallelMergesortV1(s []int) {
go func() {
defer wg.Done()
parallelMergesortV1(s[:middle])
parallelMergesortV2(s[:middle])
}()
go func() {
defer wg.Done()
parallelMergesortV1(s[middle:])
parallelMergesortV2(s[middle:])
}()
wg.Wait()
@ -33,34 +69,6 @@ func parallelMergesortV1(s []int) {
}
}
const max = 2048
func parallelMergesortV2(s []int) {
if len(s) > 1 {
if len(s) <= max {
sequentialMergesort(s)
} else {
middle := len(s) / 2
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
parallelMergesortV2(s[:middle])
}()
go func() {
defer wg.Done()
parallelMergesortV2(s[middle:])
}()
wg.Wait()
merge(s, middle)
}
}
}
func merge(s []int, middle int) {
helper := make([]int, len(s))
copy(helper, s)