diff options
| author | Paul Buetow <paul@buetow.org> | 2020-07-15 08:28:21 +0100 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2020-07-15 08:28:21 +0100 |
| commit | e6e3b27756974ad7255345c98260918a96f3a476 (patch) | |
| tree | d56e404ca6724a64116aa10cb147161f8e7fcff2 | |
| parent | 73ca4d0b86036a41b452212702e6aa669888d740 (diff) | |
fix shell sort
| -rw-r--r-- | ds/comparer.go | 10 | ||||
| -rw-r--r-- | ds/integer.go | 22 | ||||
| -rw-r--r-- | sort/insertion.go | 2 | ||||
| -rw-r--r-- | sort/selection.go | 2 | ||||
| -rw-r--r-- | sort/shell.go | 9 | ||||
| -rw-r--r-- | sort/sorted.go | 2 |
6 files changed, 29 insertions, 18 deletions
diff --git a/ds/comparer.go b/ds/comparer.go index 168ec19..8fb3727 100644 --- a/ds/comparer.go +++ b/ds/comparer.go @@ -1,8 +1,10 @@ package ds type Comparer interface { - LowerThan(a Comparer) bool - HigherThan(a Comparer) bool - Equals(a Comparer) bool - IntVal() int + Equal(a Comparer) bool + Lower(a Comparer) bool + LowerEqual(a Comparer) bool + Higher(a Comparer) bool + HigherEqual(a Comparer) bool + Int() int } diff --git a/ds/integer.go b/ds/integer.go index b8026da..336a941 100644 --- a/ds/integer.go +++ b/ds/integer.go @@ -39,18 +39,26 @@ func (i Integer) String() string { return fmt.Sprintf("%d", i.val) } -func (i Integer) IntVal() int { +func (i Integer) Int() int { return i.val } -func (i Integer) LowerThan(j Comparer) bool { - return i.val < j.IntVal() +func (i Integer) Equal(j Comparer) bool { + return i.val == j.Int() } -func (i Integer) HigherThan(j Comparer) bool { - return i.val > j.IntVal() +func (i Integer) Lower(j Comparer) bool { + return i.val < j.Int() } -func (i Integer) Equals(j Comparer) bool { - return i.val == j.IntVal() +func (i Integer) LowerEqual(j Comparer) bool { + return i.val <= j.Int() +} + +func (i Integer) Higher(j Comparer) bool { + return i.val > j.Int() +} + +func (i Integer) HigherEqual(j Comparer) bool { + return i.val >= j.Int() } diff --git a/sort/insertion.go b/sort/insertion.go index d14c275..8e4af30 100644 --- a/sort/insertion.go +++ b/sort/insertion.go @@ -9,7 +9,7 @@ func Insertion(a []ds.Comparer) []ds.Comparer { for i := 0; i < length; i++ { for j := i; j > 0; j-- { - if a[j].HigherThan(a[j-1]) { + if a[j].Higher(a[j-1]) { break } tmp := a[j] diff --git a/sort/selection.go b/sort/selection.go index 2782460..d084fc0 100644 --- a/sort/selection.go +++ b/sort/selection.go @@ -9,7 +9,7 @@ func Selection(a []ds.Comparer) []ds.Comparer { for i := 0; i < length; i++ { min := i for j := i + 1; j < length; j++ { - if a[min].HigherThan(a[j]) { + if a[min].Higher(a[j]) { min = j } } diff --git a/sort/shell.go b/sort/shell.go index 99aaf3d..39414f5 100644 --- a/sort/shell.go +++ b/sort/shell.go @@ -17,11 +17,12 @@ func Shell(a []ds.Comparer) []ds.Comparer { for h >= 1 { for i := h; i < length; i++ { for j := i; j >= h; j -= h { - if a[j].LowerThan(a[j-h]) { - tmp := a[j] - a[j] = a[j-h] - a[j-h] = tmp + if a[j-h].Lower(a[j]) { + break } + tmp := a[j] + a[j] = a[j-h] + a[j-h] = tmp } } diff --git a/sort/sorted.go b/sort/sorted.go index a24de19..b29e3c6 100644 --- a/sort/sorted.go +++ b/sort/sorted.go @@ -4,7 +4,7 @@ import "algorithms/ds" func Sorted(a []ds.Comparer) bool { for i := len(a) - 1; i > 0; i-- { - if a[i].LowerThan(a[i-1]) { + if a[i].Lower(a[i-1]) { return false } } |
