30 lines
403 B
Go
30 lines
403 B
Go
|
|
package utility
|
|||
|
|
|
|||
|
|
import "sort"
|
|||
|
|
|
|||
|
|
// 二分查找(会将切片 a 排为升序)
|
|||
|
|
//
|
|||
|
|
// 找到返回 true,未找到返回 false
|
|||
|
|
func BinarySearch(a []int, x int) bool {
|
|||
|
|
if !sort.IntsAreSorted(a) {
|
|||
|
|
sort.Ints(a)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
l, r := 0, len(a)-1
|
|||
|
|
|
|||
|
|
for l <= r {
|
|||
|
|
m := (l + r) / 2
|
|||
|
|
if a[m] == x {
|
|||
|
|
return true
|
|||
|
|
}
|
|||
|
|
// x 在左边
|
|||
|
|
if x < a[m] {
|
|||
|
|
r = m - 1
|
|||
|
|
} else {
|
|||
|
|
l = m + 1
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
return false
|
|||
|
|
}
|