二分查找
package main
import "fmt"
func main() {
var arr = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
offset := binarySearch(arr, 9)
fmt.Println(offset)
}
// 二分查找
func binarySearch(arr []int, number int) int {
if len(arr) == 0 {
return -1
}
lower := 0
high := len(arr) - 1
for lower <= high {
// 以中间点作为参照点比较
middle := (high + lower) / 2
if arr[middle] > number {
// 查找数比参照点小,舍去右边
high = middle - 1
} else if arr[middle] < number {
// 查找数比参照点大,舍去左边
lower = middle + 1
} else {
return middle
}
}
// 未找到,返回-1
return -1
}
// 递归版
func recursion(arr []int, number, lower, high int) int {
middle := (lower + high) / 2
if lower > high {
return -1
}
if arr[middle] > number {
return recursion(arr, number, lower, middle-1)
} else if arr[middle] < number {
return recursion(arr, number, middle+1, high)
} else {
return middle
}
}Last updated