Golang 二分查找算法
// 二分查找 只适用于以及排列好的集合
//输入 :拍好序的集合
// 如果要查找的元素在集合中:(返回位置索引)
// 否则返回空
// 从200万数据中取出其中的一个数据要查找多少次
二分查找其实是从一段数组中取出中间的数字和目标函数一层一层比较
func findBinarySearch(list []int, target int) int {
// 定义最小索引 以及最大索引和中间要走的步数
low := 0
heigh := len(list) - 1
step := 0
for {
step = step + 1
if low <= heigh {
//中位数索引
mid := (heigh + low) / 2
guess := list[mid]
if guess == target {
fmt.Printf("共查找了%d 次", step)
return mid
}
if guess > target {
heigh = mid - 1
} else {
low = mid + 1
}
}
}
}
func main() {
list := make([]int, 1000000)
//fmt.Print(list)
for i := 0; i < 1000000; i++ {
list = append(list, i+1)
}
//fmt.Println(list)
rand.Seed(time.Now().UnixNano())
for i := 0; i <= 10; i++ {
v := rand.Intn(1000000)
idx := findBinarySearch(list, v)
fmt.Printf("%d 的索引位置是[%d]\n", v, idx)
fmt.Println("=======")
}
}