Binary Search in Golang and Linear search method
Algorithm basics in Go: Binary Search in Golang and Linear Search method
Play this article
Algorithms in Golang
Algorithms and data structure is a big portion of our code, and starting out you might come across Binary Search as one of your lessons, If you are into Go, consider this code, as it helps you solve this common question.
Calculating mid in binary search
Most cases when you write a binary search you make the mistake of using (low + high )/ 2
and while this is valid for uint, unsigned integers (0, 255), you may in certain cases, run to a integers (-128, 127) where you run to some weird issues, this code will demonstrate that for you
func main() {
var low int8 = 80
var high int8 = 120
var mid int8
mid = (low + (high-low)/2)
fmt.Println(mid)
mid = (high + low) / 2
fmt.Println(mid)
}
Console prints out:
100
-28
If you need more informations, No one is better than Joshua Bloch article, at Google blog
Binary Search in Golang and Linear Search method
package main
import "fmt"
func main() {
b := []int{2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 100, 159, 192, 350, 1230, 1341, 4533}
fmt.Println(BinarySearch(b, 31))
fmt.Println(LinearSearch(b, 31))
}
func BinarySearch(haystack []int, needle int) bool {
var high, low, mid, val int
low = 0
high = len(haystack)
for low < high {
mid = (low + ((high - low) / 2))
val = haystack[mid]
fmt.Println(val)
if val == needle {
return true
} else if val > needle {
high = mid
} else if val < needle {
low = mid + 1
}
}
return false
}
func LinearSearch(haystack []int, needle int) bool {
for _, v := range haystack {
fmt.Println(v)
if v == needle {
return true
}
}
return false
}