Skip to content

Instantly share code, notes, and snippets.

@irtaylor
Created September 18, 2017 23:28
Show Gist options
  • Save irtaylor/7140705cf3a4e2d63bfc55c39a421b89 to your computer and use it in GitHub Desktop.
Save irtaylor/7140705cf3a4e2d63bfc55c39a421b89 to your computer and use it in GitHub Desktop.
implementation of iterative and recursive binary search in Go
package main
import (
"fmt"
)
func binary_search_recursive(A []int, key, low int, high int) int {
if low > high {
return -1
}
i := (low + high) / 2
if key < A[i] {
return binary_search_recursive(A, key, low, i-1)
} else if key > A[i] {
return binary_search_recursive(A, key, i+1, high)
}
return i
}
func binary_search(A []int, key int) int {
low, high := 0, len(A)-1
for low <= high {
i := (low + high) / 2
if key == A[i] {
return i
} else if key < A[i] {
high = i - 1
} else if key > A[i] {
low = i + 1
}
}
return -1
}
func main() {
a := []int{-3, 0, 4, 6, 7, 10, 11, 45, 86, 90}
fmt.Println("\na: ", a, "\n")
fmt.Println("iterative, not found -4: ", binary_search(a, -4))
fmt.Println("iterative, find 4: ", binary_search(a, 4))
fmt.Println("iterative, find 45: ", binary_search(a, 45))
fmt.Println("iterative, find 90: ", binary_search(a, 90), "\n")
fmt.Println("recursive, not found -4: ", binary_search_recursive(a, -4, 0, len(a)-1))
fmt.Println("recursive, find 4: ", binary_search_recursive(a, 4, 0, len(a)-1))
fmt.Println("recursive, find 45: ", binary_search_recursive(a, 45, 0, len(a)-1))
fmt.Println("recursive, find 90: ", binary_search_recursive(a, 90, 0, len(a)-1), "\n")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment