二分查找的代码实现|学习笔记

简介: 快速学习二分查找的代码实现

开发者学堂课程【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 indD: \ 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

找不到

说明代码没有问题

整理代码

相关文章
|
算法 C语言 C++
【双指针问题】LeetCode344、345、 844、283问题详解及代码实现
编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。
79 0
|
6月前
|
算法 Java C++
归并排序代码实现
归并排序代码实现
30 0
|
算法 C语言 C++
【双指针问题】LeetCode:392、3、11问题详解及代码实现
本篇总结过去一周内遇到双指针问题。
122 0
|
算法 搜索推荐
【排序算法】5行代码实现冒泡排序
【排序算法】5行代码实现冒泡排序
|
算法
【二分查找】详细图解
【二分查找】详细图解
164 0
二分查找进阶版
二分查找进阶版
|
人工智能 搜索推荐 算法
个人整理——排序算法及其代码实现
冒泡排序就是把小的元素往前调或者把大的元素往后调。比较是相邻的两个元素比较,交换也发生在这两个元素之间。元素相等不交换,如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。 每趟排序必确定一个数值的最终位置。
个人整理——排序算法及其代码实现
|
算法
力扣704二分查找:思路分析+代码实现(递归与非递归)
力扣704二分查找:思路分析+代码实现(递归与非递归)
131 0
二分查找【多种方法+图解】
介绍以及简单思路介绍 第一种解法,[left,right]区间 第二种解法,[left,right)区间
85 0
|
算法 Go 开发者
二分查找的思路分析|学习笔记
快速学习二分查找的思路分析
二分查找的思路分析|学习笔记