golang二分查找
package main import "fmt" func main() { //二分法查找思路,目标数findVal /* arr是一个有序数组,并且是从小到大排序 先找到中间的下标middle=(leftindex + rightindex) / 2,然后让中间下标的值和findVal比较 如果arr[middle] > findVal, 则进入leftIndex - (middle-1)范围查找 如果arr[middle] < findVal, 则进入(middle-1) - rightIndex范围查找 如果arr[middle] = findVal, 就找到了findVal 重复以上操作 退出递归的条件 如果leftindex > rightindex */ arr := [6]int{1, 8, 10, 89, 1000, 1024} BinaryFind(&arr, 0, len(arr)-1, 1024) } func BinaryFind(arr *[6]int, leftindex int, rightindex int, findVal int) { //退出递归的条件 if leftindex > rightindex { fmt.Println("没找到") return } middle := (leftindex + rightindex) / 2 if (*arr)[middle] > findVal { //没找到,中间值大于目标值,因此要在左边查找 BinaryFind(arr, leftindex, middle-1, findVal) } else if (*arr)[middle] < findVal { //没找到,中间值小于目标值,因此要在右边查找 BinaryFind(arr, middle+1, rightindex, findVal) } else { fmt.Printf("找到了, 下标为: %v\n", middle) } }