summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2020-07-15 08:28:21 +0100
committerPaul Buetow <paul@buetow.org>2020-07-15 08:28:21 +0100
commite6e3b27756974ad7255345c98260918a96f3a476 (patch)
treed56e404ca6724a64116aa10cb147161f8e7fcff2
parent73ca4d0b86036a41b452212702e6aa669888d740 (diff)
fix shell sort
-rw-r--r--ds/comparer.go10
-rw-r--r--ds/integer.go22
-rw-r--r--sort/insertion.go2
-rw-r--r--sort/selection.go2
-rw-r--r--sort/shell.go9
-rw-r--r--sort/sorted.go2
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
}
}