Go知识库

兄弟连Go语言培训分享sort包sort.search()使用教

2018-08-14  本文已影响2人  ab6973df9221

search使用二分法进行查找,Search()方法回使用“二分查找”算法来搜索某指定切片[0:n],并返回能够使f(i)=true的最小的i(0<=i

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

}

上一篇 下一篇

猜你喜欢

热点阅读