Go算法

(5)Go实现二分查找法

2019-05-14  本文已影响0人  哥斯拉啊啊啊哦

二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,二分查找法要求表中数据是可比较大小且有序的。

二分查找法的实现 

func binarySearch(target int, arr []int) int {
    // 前闭后开,要清楚l,r这两个变量具体表达的意义,
    // 之后的循环中,要维护这个意义,才不容易出错
    r := len(arr)
    l := 0

    for l < r {
        mid := l + (r-l)/2

        if arr[mid] == target {
            return mid
        }

        if target < arr[mid] {
            r = mid // 在[l...mid)前闭后开中找
        } else {
            l = mid + 1 // 在[mid+1...l)前闭后开中找
        }
    }
    // 若找不到对应的值,返回索引-1
    return -1
}
测试
func main() {
    arr := []int{5, 9, 36, 42, 48, 63, 98, 102, 111}
    k := binarySearch(102, arr)
    fmt.Println(k)
}

测试结果 //
7
上一篇下一篇

猜你喜欢

热点阅读