diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2020-08-08 13:01:36 +0100 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2020-08-08 13:01:36 +0100 |
| commit | 390333bb314f6cb25adc5716ea383112860ed342 (patch) | |
| tree | 2b87d5741d84b2cd2d7c74eaaa0f522c3a8a221c /sort/parallelmerge.go | |
| parent | deaa4e1c33cd2c1c75f698881918688055abfa51 (diff) | |
add parallelquick and so on
Diffstat (limited to 'sort/parallelmerge.go')
| -rw-r--r-- | sort/parallelmerge.go | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/sort/parallelmerge.go b/sort/parallelmerge.go new file mode 100644 index 0000000..b6cf721 --- /dev/null +++ b/sort/parallelmerge.go @@ -0,0 +1,36 @@ +package sort + +import ( + "algorithms/ds" + "sync" +) + +func ParallelMerge(a ds.ArrayList) ds.ArrayList { + aux := make(ds.ArrayList, len(a)) + parallelMerge(a, aux, 0, len(a)-1) + + return a +} + +func parallelMerge(a, aux ds.ArrayList, lo, hi int) { + mid := lo + (hi-lo)/2 + defer merge(a, aux, lo, mid, hi) + + if hi-lo <= 1000 { + mergeSort(a, aux, lo, mid) + mergeSort(a, aux, mid+1, hi) + return + } + + var wg sync.WaitGroup + wg.Add(2) + go func() { + parallelMerge(a, aux, lo, mid) + wg.Done() + }() + go func() { + parallelMerge(a, aux, mid+1, hi) + wg.Done() + }() + wg.Wait() +} |
