基本算法(01) - 二分查找
前言
二分(折半)查找(Binary Search),通过缩小查找区域来查找数据
- 查找序列是有序的(升序或者降序)
步骤
假设序列是升序的
- 取序列中间元素进行比较。
- 如果待查找元素x大于中间元素,说明x在中间元素右侧。
- 如果待查找元素x小于中间元素,说明x在中间元素左侧。
- 如果待查找元素x等于中间元素,查找成功。
- 重复上面步骤,直到查找成功或者失败
学习
计算公式:
()
比较次数:
当序列中包含n个元素的时候,查找失败时,至少比较a次关键字;查找成功时,最多比较关键字次数是b。
时间复杂度:while的执行次数
Demo(Scala)
package info.aoye object Test { def main(args: Array[String]): Unit = { val array = Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 12, 34, 67, 89, 90) println(binarySearch(array, 1)) } def binarySearch(array: Array[Int], x: Int): Int = { if (array.isEmpty) { println("Error: Empty array!") } var left = 0 var right = array.length - 1 val defResult = -1 while (left <= right) { //val middle = left + (right - left) / 2 val middle = (right + left) / 2 println(right + ":" + left + ":" + middle) if (x < array(middle)) { right = middle - 1 } else if (x > array(middle)) { left = middle + 1 } else { return array(middle) } } defResult } }
引用
https://www.2cto.com/kf/201608/534039.html
https://blog.csdn.net/qq_22238533/article/details/79218266
http://blog.51cto.com/clown5/1757249
本文来自博客园,作者:duchaoqun,转载请注明原文链接:https://www.cnblogs.com/duchaoqun/p/12695608.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?