二分查找

简介: 二分查找

思路分析


image.png


二分查找的思路:比如我们要查找的数是findVal


使用的是Golang

  1. arr 是一个有序数组,并且是从小到大排序


  1. 先找到中间的下标 middle = (leftindex + rightindex) / 2, 然后让中间下标的值和findVal进行比较


  • 2.l. 如果 arr[middle] > findVal, 就应该向 leftindex---(middle-1)
  • 2.2. 如果 arr[middle] < findVal, 就应该向 middle+1---rightindex
  • 2.3. 如果 arr[middle] = findVal, 就找到了
  • 2.4. 上面的2.1,2.2,2.3的逻辑递归执行


  1. 想一下,怎么样的情况下,就说明找到递归退出的条件
if leftindex > rightindex{
      // 找不到
      return
  }


有了上面的分析思路,接下来看一下代码实现。


代码实现


package main
import "fmt"
// 二分查找函数
// 递归, 边界条件
func binaryFind(arr *[6]int, leftIndex int, rightIndex int, findVal int) {
  // 找不到的情况
  // 退出递归的条件
  if leftIndex > rightIndex {
    fmt.Println("找不到")
    return
  }
  // 递归条件
  // 先找到中间下标,折半
  mid := (leftIndex + rightIndex) / 2
  if (*arr)[mid] > findVal {
    // findVal 在左边 leftIndex - (mid - 1)
    binaryFind(arr, leftIndex, mid-1, findVal)
  } else if (*arr)[mid] < findVal {
    // findVal 在右边 (mid + 1) - rightIndex
    binaryFind(arr, mid+1, rightIndex, findVal)
  } else {
    // 找到了
    fmt.Printf("找到了,下标为%v", mid)
  }
}
func main() {
  // 有序数组
  var arr [6]int = [6]int{1, 8, 10, 89, 1000, 1234}
  fmt.Println("arr = ", arr)
  // 二分查找/折半查找
  binaryFind(&arr, 0, len(arr), 8)
}
arr =  [1 8 10 89 1000 1234]
找到了,下标为1


目录
相关文章
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
2227 4
Layui 内置方法 - layer.confirm(询问框)
Layui 内置方法 - layer.confirm(询问框)
1878 0
|
12月前
|
Java Maven
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
在Java项目中,启动jar包时遇到“no main manifest attribute”错误,且打包大小明显偏小。常见原因包括:1) Maven配置中跳过主程序打包;2) 缺少Manifest文件或Main-Class属性。解决方案如下:
2658 8
java项目中jar启动执行日志报错:no main manifest attribute, in /www/wwwroot/snow-server/z-server.jar-jar打包的大小明显小于正常大小如何解决
|
存储 缓存 监控
【JVM调优】如何进行JVM调优?一篇文章就够了!
深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。
4064 16
【JVM调优】如何进行JVM调优?一篇文章就够了!
|
人工智能 区块链 vr&ar
元宇宙中的艺术与文化:虚拟画廊的崛起
【10月更文挑战第28天】随着科技的发展,元宇宙逐渐成为现实,为文化艺术领域带来了巨大潜力。虚拟画廊作为数字艺术的展示平台,利用3D建模、VR、AR等技术,打破物理空间限制,提供沉浸式艺术体验。观众可通过虚拟现实设备自由浏览、欣赏和互动,促进艺术传播和社交交流,未来还将结合AI和区块链等技术,进一步提升用户体验和版权保护,成为文化艺术的重要发展方向。
|
存储 缓存
[simulink] --- simulink模块(一)
[simulink] --- simulink模块
9249 0
|
存储 算法 Java
一文带你了解 Java 的内存区域
内存和存储器这两个术语均指计算机的内部存储空间。存储器包括:内部存储器(内存)、外部存储器(外存)、寄存器。
一文带你了解 Java 的内存区域
|
SQL Oracle Java
MySQL去重3种方法,还有谁不会?
MySQL去重3种方法,还有谁不会?
MySQL去重3种方法,还有谁不会?
崮德好文连载 - 时间&事项管理工具
有很多同事问我,崮徳,你每天都有这么多想法,还要工作,学习英语,看书,大脑怎么够用,时间怎么够?我觉得吧,这个要看方法,而不是靠人定胜天。比如,我之前提到的日程管理,事项管理等帮忙记忆细节的小工具,可以把大脑从记忆琐碎的细节中释放出来,那么清空大脑后,大脑的效率会大大提高。
|
安全 iOS开发