golang:sort.Search在切片中找不到第一个元素
问题描述:
I have write some code to find element position in sorted slice use sort.Search, but it can't correctly get the right position of first element.
package main
import (
"fmt"
"sort"
)
func main() {
data := []int{1, 2, 3}
fmt.Println(sort.Search(len(data), func(i int) bool {
return data[i] < 2 // or data[i] == 1
}))
}
The standard output is always 3 rather than 0. Is it a bug? Or am i wrong?
Thanks.
答
If you want to search for the first element, then in your comparator function you should compare the i
th element to the first which is data[0]
(or the value which is 1
).
And since your slice is sorted in ascending order, you have to use the >=
operator for comparision because sort.Search()
returns the smallest index i
in [0, n)
at which f(i)
is true
.
data := []int{1, 2, 3}
fmt.Println(sort.Search(len(data), func(i int) bool {
return data[i] >= data[0] // You could also use 1 instead of data[0]
}))
Output: 0
as expected. Try it on Go Playground.