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)
	}
}

  

posted @ 2022-03-01 16:19  Star_Gazer  阅读(71)  评论(0编辑  收藏  举报