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
}
Go