先上源码
在做 leetcode35 搜寻插入地位的时候,偶然间,我想起来了 sort.SearchInts 函数
于是我棘手点开了 SearchInts 的源码
出其不意的,这个函数的代码只有一行
再次点进 search 函数的源码
能够看到
通过浏览发现
这是一个二分查找的模板,
传入的参数为 数组的长度 n,以及,一个返回为 bool 的函数值
对 0 和 n 进行操作获得两头值 h
为了避免溢出,在求平均值时应用无符号数 uint 失去双倍的最大示意数
之后,依据函数值的断定后果抉择区间并再次进行二分查找,直至完结
这里巧用函数值作为参数,让所有须要应用二分查找模板的人都能调用这个模板,并重写适宜本人的函数值 f 作为二分查找的断定条件
可见,函数值是 go 中一个微妙的设计,对于函数值的具体介绍,能够看 go 圣经中的函数值局部 https://books.studygolang.com…
于是,咱们从新回到 sort.SearchInts 函数,
他的 f 断定条件为 切片的第 i 个数是否大于参数 x
天然,二分查找的后果就是
在参数 a 这个切片中,寻找 x 这个数
切片中如果有这个数,则返回他的索引
如果找不到这个数,则返回第一个大于 x 的的数的索引