summaryrefslogtreecommitdiff
path: root/sort/parallelquick.go
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2020-08-08 14:32:37 +0100
committerPaul Buetow <pbuetow@mimecast.com>2020-08-08 14:32:37 +0100
commitc870dae11a5ec088800a35665d6ac1baa3abef3a (patch)
tree901714ce898921077efd0e4f903175a390b6cebf /sort/parallelquick.go
parent0db964a3b8ba57b3677d9d201870ee5ab15b6a30 (diff)
refactor quicksort
Diffstat (limited to 'sort/parallelquick.go')
-rw-r--r--sort/parallelquick.go21
1 files changed, 11 insertions, 10 deletions
diff --git a/sort/parallelquick.go b/sort/parallelquick.go
index f68135f..2ac9f0e 100644
--- a/sort/parallelquick.go
+++ b/sort/parallelquick.go
@@ -7,34 +7,35 @@ import (
func ParallelQuick(a ds.ArrayList) ds.ArrayList {
Shuffle(a)
- parallelQuick(a, 0, len(a)-1)
+ parallelQuick(a)
return a
}
-func parallelQuick(a ds.ArrayList, lo, hi int) {
- if hi <= lo+10 {
- insertion(a, lo, hi)
+func parallelQuick(a ds.ArrayList) {
+ length := len(a)
+ if length <= 10 {
+ Insertion(a)
return
}
- j := quickPartition(a, lo, hi)
+ j := quickPartition(a)
- if hi <= lo+1000 {
+ if length >= 1000 {
var wg sync.WaitGroup
wg.Add(2)
defer wg.Wait()
go func() {
- parallelQuick(a, lo, j-1)
+ parallelQuick(a[0:j])
wg.Done()
}()
go func() {
- parallelQuick(a, j+1, hi)
+ parallelQuick(a[j+1:])
wg.Done()
}()
return
}
- parallelQuick(a, lo, j-1)
- parallelQuick(a, j+1, hi)
+ parallelQuick(a[0:j])
+ parallelQuick(a[j+1:])
}