min_interface.go 925 B

1234567891011121314151617181920212223242526272829303132333435
  1. // min_interface.go
  2. package min
  3. type Miner interface {
  4. Len() int
  5. ElemIx(ix int) interface{}
  6. Less(i, j int) bool
  7. Swap(i, j int)
  8. }
  9. func Min(data Miner) interface{} {
  10. min := data.ElemIx(0)
  11. for i := 1; i < data.Len(); i++ {
  12. if data.Less(i, i-1) {
  13. min = data.ElemIx(i)
  14. } else {
  15. data.Swap(i, i-1)
  16. }
  17. }
  18. return min
  19. }
  20. type IntArray []int
  21. func (p IntArray) Len() int { return len(p) }
  22. func (p IntArray) ElemIx(ix int) interface{} { return p[ix] }
  23. func (p IntArray) Less(i, j int) bool { return p[i] < p[j] }
  24. func (p IntArray) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
  25. type StringArray []string
  26. func (p StringArray) Len() int { return len(p) }
  27. func (p StringArray) ElemIx(ix int) interface{} { return p[ix] }
  28. func (p StringArray) Less(i, j int) bool { return p[i] < p[j] }
  29. func (p StringArray) Swap(i, j int) { p[i], p[j] = p[j], p[i] }