diff options
| author | Paul Buetow <pbuetow@mimecast.com> | 2020-08-08 15:57:37 +0100 |
|---|---|---|
| committer | Paul Buetow <pbuetow@mimecast.com> | 2020-08-08 15:57:37 +0100 |
| commit | b8c45f87d6f7251701f95eb6b8ac1efd4255d298 (patch) | |
| tree | 6076a23ec57d75c57bd2a5556afbf9c94a32d23f /sort/parallelmerge.go | |
| parent | ae7d31d6b6d735810ea27b788491d291754374aa (diff) | |
refactor
Diffstat (limited to 'sort/parallelmerge.go')
| -rw-r--r-- | sort/parallelmerge.go | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/sort/parallelmerge.go b/sort/parallelmerge.go index 577d7c1..f9a59a3 100644 --- a/sort/parallelmerge.go +++ b/sort/parallelmerge.go @@ -6,31 +6,38 @@ import ( ) func ParallelMerge(a ds.ArrayList) ds.ArrayList { - aux := make(ds.ArrayList, len(a)) - parallelMerge(a, aux, 0, len(a)-1) - + parallelMerge(a, make(ds.ArrayList, len(a))) return a } -func parallelMerge(a, aux ds.ArrayList, lo, hi int) { - mid := lo + (hi-lo)/2 - defer merge(a, aux, lo, mid, hi) +func parallelMerge(a, aux ds.ArrayList) { + length := len(a) + if length <= 1 { + return + } - if hi-lo <= 1000 { - //mergeSort(a, aux, lo, mid) - //mergeSort(a, aux, mid+1, hi) + mi := length / 2 + if length < 1000 { + mergeSort(a[0:mi], aux[0:mi]) + mergeSort(a[mi:], aux[mi:]) + merge(a, aux, 0, mi, length-1) return } var wg sync.WaitGroup wg.Add(2) + go func() { - parallelMerge(a, aux, lo, mid) + parallelMerge(a[0:mi], aux[0:mi]) wg.Done() }() + go func() { - parallelMerge(a, aux, mid+1, hi) + parallelMerge(a[mi:], aux[mi:]) wg.Done() }() + wg.Wait() + merge(a, aux, 0, mi, length-1) + return } |
