package main import ( "fmt" ) //在有序的切片中查找指定的值。每次都需要从中间位置开始, //如果索引对应的值和目标值一致就返回,如果中间位置的值大于目标值那下次就需要从0~(索引-1)寻找 //如果中间位置的值小于目标值那下次就需要从(索引+1)~最后 寻找 //注意 切片内的元素必须是升序排好序的 func FindValue(target int, slice []int) int { low := 0 hight := len(slice) - 1 step := 0 for { step++ fmt.Printf("共查找了%d次\n", step) searchIndex := (hight + low) / 2 middleValue := slice[searchIndex] if low <= hight { if middleValue > target { hight = searchIndex - 1 } else if middleValue < target { low = searchIndex + 1 } else { fmt.Printf("索引是%d\n 值是%d\n", searchIndex, middleValue) return searchIndex } } } } func main() { list := make([]int, 1_000_000) for i := 0; i < 1_000_000; i++ { list = append(list, i+1) } FindValue(67, list) FindValue(10005, list) fmt.Println(fmt.Println()) //FindValue(target,slice) }