Go: BinarySerach
recursion:
package main import ( "fmt" ) func main() { var array = []int{0, 1, 2, 4, 5, 8, 9} index := BinarySearch(array, 0, len(array)-1, 5) println("index = ", index) } func BinarySearch(arr []int, commence int, closure int, findValue int) int { if commence > closure { println("search not") return -1 } var middle = (commence + closure) / 2 if arr[middle] > findValue { fmt.Printf("> middle = %v, arr[middle] = %v\n", middle, arr[middle]) return BinarySearch(arr, commence, middle-1, findValue) } else if arr[middle] < findValue { fmt.Printf("< middle = %v, arr[middle] = %v\n", middle, arr[middle]) return BinarySearch(arr, middle+1, closure, findValue) } else { fmt.Printf("found index %v\n", middle) return middle } }
for iteration:
package main import ( "fmt" ) func main() { var array = []int{0, 1, 2, 4, 5, 8, 9} index := BinarySearch(array, 0, len(array)-1, 5) println("index = ", index) } func BinarySearch(arr []int, commence int, closure int, findValue int) int { if commence > closure { println("search not") return -1 } for commence <= closure { middle := (commence + closure) / 2 if arr[middle] > findValue { fmt.Printf("> middle = %v, arr[middle] = %v\n", middle, arr[middle]) closure = middle - 1 } else if arr[middle] < findValue { fmt.Printf("< middle = %v, arr[middle] = %v\n", middle, arr[middle]) commence = middle + 1 } else { fmt.Printf("found index %v\n", middle) return middle } } return -1 }