golang 中sort包sort.search()使用教程

豆瓣奶茶 · · 11578 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

func Search(n int, f func(int) bool) int

search使用二分法进行查找,Search()方法回使用“二分查找”算法来搜索某指定切片[0:n],并返回能够使f(i)=true的最小的i(0<=i<n)值,并且会假定,如果f(i)=true,则f(i+1)=true,即对于切片[0:n],i之前的切片元素会使f()函数返回false,i及i之后的元素会使f()函数返回true。但是,当在切片中无法找到时f(i)=true的i时(此时切片元素都不能使f()函数返回true),Search()方法会返回n(而不是返回-1)。

Search 常用于在一个已排序的,可索引的数据结构中寻找索引为 i 的值 x,例如数组或切片。这种情况下,实参 f,一般是一个闭包,会捕获所要搜索的值,以及索引并排序该数据结构的方式。

为了查找某个值,而不是某一范围的值时,如果slice以升序排序,则 f func中应该使用>=,如果slice以降序排序,则应该使用<=. 例子如下:package main

package main  
  
import (  
    "fmt"  
    "sort"  
)  
  
func main() {  
    a := []int{1, 2, 3, 4, 5}  
    b := sort.Search(len(a), func(i int) bool { return a[i] >= 30 })  
    fmt.Println(b)       //5,查找不到,返回a slice的长度5,而不是-1  
    c := sort.Search(len(a), func(i int) bool { return a[i] <= 3 })  
    fmt.Println(c)                             //0,利用二分法进行查找,返回符合条件的最左边数值的index,即为0  
    d := sort.Search(len(a), func(i int) bool { return a[i] == 3 })  
    fmt.Println(d)                          //2     
}  

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:豆瓣奶茶

查看原文:golang 中sort包sort.search()使用教程

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

11578 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传