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

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

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

找不到

说明代码没有问题

整理代码

相关文章
|
4月前
|
存储 缓存 数据库
如何开发人事及OA管理系统的全局基础设置板块?(附架构图+流程图+代码参考)
在企业数字化转型中,人事管理系统(HRM)与办公自动化系统(OA)已成为核心工具。本文详解全局基础设置的三大核心模块:部门岗位基础表、工作日历和工作地点基础表,涵盖功能设计、业务流程、开发技巧与代码示例,助力企业优化系统架构,提升管理效率与扩展性。
|
2月前
|
人工智能 自然语言处理 测试技术
让AI帮你跑用例-重复执行,不该成为测试工程师的主旋律
测试不该止步于重复执行。测吧科技推出用例自动执行智能体,通过AI理解自然语言用例,动态规划路径、自主操作工具、自动重试并生成报告,让测试工程师从“点点点”中解放,专注质量思考与创新,提升效率3倍以上,节约人力超50%,重构测试生产力。
|
6月前
|
缓存 监控 Cloud Native
Java Solon v3.2.0 高并发与低内存实战指南之解决方案优化
本文深入解析了Java Solon v3.2.0框架的实战应用,聚焦高并发与低内存消耗场景。通过响应式编程、云原生支持、内存优化等特性,结合API网关、数据库操作及分布式缓存实例,展示其在秒杀系统中的性能优势。文章还提供了Docker部署、监控方案及实际效果数据,助力开发者构建高效稳定的应用系统。代码示例详尽,适合希望提升系统性能的Java开发者参考。
361 4
Java Solon v3.2.0 高并发与低内存实战指南之解决方案优化
|
运维 Linux Apache
Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例
【10月更文挑战第8天】本文介绍了Puppet这一强大的自动化运维工具,涵盖其基本概念、安装配置及使用示例。Puppet通过定义资源状态和关系,确保系统配置始终如一,支持高效管理基础设施。文章详细讲解了Puppet的安装步骤、配置方法及DSL语言示例,帮助读者快速掌握Puppet的使用技巧。
867 2
|
Java 应用服务中间件 Maven
IDEA创建一个Servlet项目(tomcat10)
IDEA创建一个Servlet项目(tomcat10)
927 1
|
11月前
|
算法
基于RRT优化算法的机械臂路径规划和避障matlab仿真
本课题基于RRT优化算法实现机械臂路径规划与避障。通过MATLAB2022a进行仿真,先利用RRT算法计算避障路径,再将路径平滑处理,并转换为机械臂的关节角度序列,确保机械臂在复杂环境中无碰撞移动。系统原理包括随机生成树结构探索空间、直线扩展与障碍物检测等步骤,最终实现高效路径规划。
|
测试技术
notepad++安装HexEditor插件查看二进制文件
有时候我们需要分析二进制文件,但是分析二进制文件直接用编辑器查看会出现乱码的情况,本文在 notepad++ 软件上安装一个 HexEditor 插件,可方便分析二进制文件。
1269 0
|
缓存 Java 应用服务中间件
【高并发优化手段】基于Springboot项目(二)
【高并发优化手段】基于Springboot项目
1371 0
|
SQL 存储 数据库
关系数据库:关系运算
关系数据库:关系运算
1114 5
关系数据库:关系运算
|
分布式计算 Hadoop 网络安全