search
This commit is contained in:
parent
125f5d669d
commit
bc04721c9a
65
search/search.go
Normal file
65
search/search.go
Normal file
@ -0,0 +1,65 @@
|
||||
package search
|
||||
|
||||
import "log"
|
||||
|
||||
func BinarySearch(needle int64, haystack []int64) bool {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Printf("%v\n", err)
|
||||
return
|
||||
}
|
||||
}()
|
||||
low := 0
|
||||
high := len(haystack) - 1
|
||||
for low <= high {
|
||||
median := (low + high) / 2
|
||||
if haystack[median] < needle {
|
||||
low = median + 1
|
||||
} else {
|
||||
high = median - 1
|
||||
}
|
||||
}
|
||||
|
||||
if low == len(haystack) || haystack[low] != needle {
|
||||
return false
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
func InterpolationSearch(needed int, haystack []int) bool {
|
||||
defer func() {
|
||||
if err := recover(); err != nil {
|
||||
log.Printf("%v\n", err)
|
||||
return
|
||||
}
|
||||
}()
|
||||
if len(haystack) == 0 {
|
||||
return false
|
||||
}
|
||||
|
||||
low := 0
|
||||
high := len(haystack) - 1
|
||||
|
||||
for (haystack[low] < needed) && (needed < haystack[high]) {
|
||||
if haystack[high] == haystack[low] {
|
||||
break
|
||||
}
|
||||
var mid = low + ((needed-haystack[low])*(high-low))/(haystack[high]-haystack[low])
|
||||
|
||||
if haystack[mid] < needed {
|
||||
low = mid + 1
|
||||
} else if haystack[mid] > needed {
|
||||
high = mid - 1
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
if haystack[low] == needed {
|
||||
return true
|
||||
}
|
||||
if haystack[high] == needed {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user