乐趣区

关于go:go源码阅读sortSearchInts与Search

先上源码

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

退出移动版