先上源码

在做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的的数的索引