二分搜索基础算法
分治算法基本思想:将一个规模为 n 的问题分解为 k 个规模较小的子问题,这些子问题相互独立且与原问题相同;
给定已排好序的 n 个元素 array[0:n-1],现要在这 n 个元素找出特定元素x;
首先较容易想到的是用顺序搜索方法,逐个比较 array[0:n-1] 中元素,直至找出元素 x 或搜索整个数组后确定 num 不在其中。这个方法没有很好的利用 n 个元素排好序这个有利条件,因此在最坏的情况下,顺序搜索方法需要 O(n) 次比较
二分搜索算法充分利用了元素间的次序关系,采用分治策略,可在最坏的情况下用 O(logn) 时间完成搜索任务;
二分搜索算法的基本思想是将 n 个元素分成个数大致相同的两半,取 array[n/2] 与 num 作比较。如果 num = array[n/2],则找到 num,算法终止;如果 num < array[n/2],则只在数组 a 的左半继续搜索 num;如果 num > array[n/2],则只在数组 a 的右半继续搜索 num。具体算法如下:
public class BinarySearch { /** * 初始化数组元素 */ private static final Integer[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; /** * 二分查找 */ public static Integer binarySearch(Integer num) { if (array.length == 0 || num == null) { throw new RuntimeException("数组元素为空 或 查找的元素为NULL"); } Integer left = 0; Integer right = array.length - 1; while (left <= right) { Integer mid = (left + right) / 2; if (num == array[mid]) { return mid; } if (array[mid] > num) { right = mid - 1; } if (array[mid] < num) { left = mid + 1; } } return -1; } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入查找的元素值:"); Integer num = input.nextInt(); Integer index = binarySearch(num); System.out.println("【-1为未查找到】查找的元素下标为:" + index); } }
每天进步一点,继续前行......
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架