Created
September 18, 2017 23:28
-
-
Save irtaylor/7140705cf3a4e2d63bfc55c39a421b89 to your computer and use it in GitHub Desktop.
implementation of iterative and recursive binary search in Go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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