开发者学堂课程【Go语言核心编程 - 基础语法、数组、切片、Map: 二分查找的代码实现】与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/625/detail/9650
二分查找的代码实现
内容介绍:
一、二分查找的代码实现
一、二分查找的代码实现
新建一个二分查找的文件夹(binaryfind)新建文件叫 main.go
package main
import (
”fmt”
)
//二分查找的函数
/*
二分查找的思路:比如我们要查找的数是findVal
1. arr 是一个有序数组,并且是从小到大排序
2. 先找到 中间的下标 middle = (1eftIndex + rightIndex)/ 2,然后让 中间下标的值和findVal进行
2.1如果 arr[middle] > findVal ,就应该向 leftIndex ---- (middle - 1)
2.2 如果 arr[middle] < findVal 就应该向 middel+1---- rightIndex
2.3如果 arr[middle] == findVal ,
就找到
2.4 上面的2.1 2.2 2.3的逻辑会递归执行
3.想一下,怎么样的情况下,就说明找不到[分析出退出递归的条件!!]
if leftIndex > rightIndex {
//找不到..
return
*/
func BinaryFind(arr *[6]int,leftIndex int , rightIndex int ,findVal )
{(用一个指针来接收,提高效率)
(因为函数里面要有数组,并且让人知道数组从左边第几个元素开始从右边第几个元素开始,因该还需要两个参数)
//判断 leftIndex 是否大于 rightIndex
if leftIndex > rightIndex {
fmt . Println("找不到" )
return
}
//先找到 中间的下标
Middle: = (leftIndex+ rightIndex) / 2
if (*arr)[middle] > findVal
{(往左边走还是右边走,跟数组本身的顺序有关;现在是从小到大中间的数还大于别人就应该向左边走)
//说明我们要查找的数,应该在 leftIndex --- middel-1
BinaryFind(arr, leftIndex,middle - 1, findVal)
} else if (*arr)[midd1e] < findval {
(中间的这个数小于 findval)//说明我们要查找的数,应该在 middel+1 --- rightIndex
BinaryFind(arr, middle + 1, rightIndex, findval)
} else {
(相等的话)
//找到了
fmt . Printf
("找到了,下标为%v \n", middle)
}
}
Func main () {
Arr :=[6]int {6,8,10,89,1000,1234}
}
//测试一把(找到的)
BinaryFind() (& arr ,0, len(arr)-1,1000)
D: \ go project\src \go _code \chapter08 \f inddemo>cd
D: \go project s \ src \go _code \c hapter08>cd b inaryf ind
D: \ go project\ src \go_ code \c hapter08\ binaryf ind>go run main _go
找到了,下标为4
//测试一把(找不到的)
BinaryFind() (& arr ,0, len(arr)-1,-6)
D: \ go project\ src \go_ code \c hapter08\ binaryf ind>go
run main _go
找不到
说明代码没有问题
整理代码