summaryrefslogtreecommitdiff
path: root/sort
diff options
context:
space:
mode:
authorPaul Buetow <pbuetow@mimecast.com>2020-08-08 14:45:56 +0100
committerPaul Buetow <pbuetow@mimecast.com>2020-08-08 14:45:56 +0100
commitae7d31d6b6d735810ea27b788491d291754374aa (patch)
treee9a671829d30fa964e12e9356002384358a7c92e /sort
parentc870dae11a5ec088800a35665d6ac1baa3abef3a (diff)
refactor merge
Diffstat (limited to 'sort')
-rw-r--r--sort/merge.go21
-rw-r--r--sort/parallelmerge.go4
2 files changed, 13 insertions, 12 deletions
diff --git a/sort/merge.go b/sort/merge.go
index 9ee788d..86eb315 100644
--- a/sort/merge.go
+++ b/sort/merge.go
@@ -6,33 +6,34 @@ import (
func Merge(a ds.ArrayList) ds.ArrayList {
aux := make(ds.ArrayList, len(a))
- mergeSort(a, aux, 0, len(a)-1)
+ mergeSort(a, aux)
return a
}
-func mergeSort(a, aux ds.ArrayList, lo, hi int) {
- if lo >= hi {
+func mergeSort(a, aux ds.ArrayList) {
+ length := len(a)
+ if length <= 1 {
return
}
- mid := lo + (hi-lo)/2
- mergeSort(a, aux, lo, mid)
- mergeSort(a, aux, mid+1, hi)
- merge(a, aux, lo, mid, hi)
+ mi := length / 2
+ mergeSort(a[0:mi], aux[0:mi])
+ mergeSort(a[mi:], aux[mi:])
+ merge(a, aux, 0, mi-1, length-1)
}
-func merge(a, aux ds.ArrayList, lo, mid, hi int) {
+func merge(a, aux ds.ArrayList, lo, mi, hi int) {
for i := lo; i <= hi; i++ {
aux[i] = a[i]
}
i := lo
- j := mid + 1
+ j := mi + 1
for k := lo; k <= hi; k++ {
switch {
- case i > mid:
+ case i > mi:
a[k] = aux[j]
j++
case j > hi:
diff --git a/sort/parallelmerge.go b/sort/parallelmerge.go
index b6cf721..577d7c1 100644
--- a/sort/parallelmerge.go
+++ b/sort/parallelmerge.go
@@ -17,8 +17,8 @@ func parallelMerge(a, aux ds.ArrayList, lo, hi int) {
defer merge(a, aux, lo, mid, hi)
if hi-lo <= 1000 {
- mergeSort(a, aux, lo, mid)
- mergeSort(a, aux, mid+1, hi)
+ //mergeSort(a, aux, lo, mid)
+ //mergeSort(a, aux, mid+1, hi)
return
}