Golang程序 在一个排序的数组中搜索一个元素
解决这个问题的方法
- 第1步:从第 0个索引到 n-1 的数组进行迭代,其中 n 是给定数组的大小。
- 第2步:声明 low=第0个索引 , high=n-1。 开始一个 for 循环,直到low小于high。
- 第3步:找到 mid=(low+high)/2 ,如果中间的元素等于 key, 则返回 mid索引。
- 第4步:如果在 mid 的元素大于 key ,那么使 high=mid。
- 第5步:如果 中间 的元素小于 key ,那么使 low = mid + 1。
- 第6步:如果 键 不在给定的数组中,那么返回 -1。
时间复杂度: log2 (n)
程序
package main
import "fmt"
func binarySearch(arr []int, key int) int{
high := len(arr) - 1
low := 0
var mid int
for low <= high {
mid = (high+low)/2
if arr[mid] == key {
return mid
} else if arr[mid] > key {
high = mid
} else {
low = mid + 1
}
}
return -1
}
func main(){
fmt.Println(binarySearch([]int{1, 4, 6, 8, 9, 10}, 11))
fmt.Println(binarySearch([]int{1, 4, 6, 8, 9, 10}, 8))
fmt.Println(binarySearch([]int{1, 4, 6, 8, 9, 10}, 10))
}
输出
-1
3
5