当前位置: 首页 > news >正文

什么网站有加工外发做的重庆最大的网络公司

什么网站有加工外发做的,重庆最大的网络公司,平面设计网站推荐,wp做网站需要多久引言 大家好!欢迎来到我的算法学习系列的第四篇。排序的主要目的之一,就是为了能够更快速地查找数据。 今天,我们将学习一种必须在有序数据上才能使用的、非常高效的查找算法——二分查找 (Binary Search),也叫折半查找。想象一下在一部厚厚的、按字母顺序排列的字典里查…

引言

大家好!欢迎来到我的算法学习系列的第四篇。排序的主要目的之一,就是为了能够更快速地查找数据。

今天,我们将学习一种必须在有序数据上才能使用的、非常高效的查找算法——二分查找 (Binary Search),也叫折半查找。想象一下在一部厚厚的、按字母顺序排列的字典里查找一个单词,你通常不会从第一页开始逐页翻看,而是会直接翻到大概中间的位置,然后根据当前页的字母与目标单词的比较,决定向前翻还是向后翻,每次都将查找范围缩小一半。这就是二分查找的核心思想。


什么是二分查找?

二分查找是一种在有序数组中查找特定元素的算法。它的基本思路是:

  1. 确定查找范围: 从整个有序数组开始。
  2. 找到中间元素: 计算查找范围的中间位置索引。
  3. 比较:
    • 如果中间元素等于目标值,查找成功。
    • 如果中间元素小于目标值,说明目标值(如果存在)一定在中间元素的右边,因此,缩小查找范围到右半部分。
    • 如果中间元素大于目标值,说明目标值(如果存在)一定在中间元素的左边,因此,缩小查找范围到左半部分。
  4. 重复: 在新的、缩小的查找范围内重复步骤 2 和 3,直到找到目标值或查找范围为空(表示目标值不存在)。

关键前提: 二分查找必须作用于一个已经排好序的数组(通常是升序)。如果数组无序,二分查找将无法保证正确性。


算法步骤详解 (以升序数组为例)

假设我们要在有序数组 arr = [1, 5, 8, 11, 19, 22, 31, 35, 40, 45, 48, 49, 50] 中查找 target = 48

  1. 初始化:

    • 左边界 left = 0
    • 右边界 right = arr.length - 1 = 12
    • 查找范围 [0, 12]
  2. 第 1 次迭代:

    • mid = left + (right - left) / 2 = 0 + (12 - 0) / 2 = 6
    • arr[mid] = arr[6] = 31
    • arr[mid] (31) < target (48) -> 目标在右半部分。
    • 更新 left = mid + 1 = 6 + 1 = 7
    • 新查找范围 [7, 12]
  3. 第 2 次迭代:

    • mid = left + (right - left) / 2 = 7 + (12 - 7) / 2 = 7 + 5 / 2 = 7 + 2 = 9 (整数除法)
    • arr[mid] = arr[9] = 45
    • arr[mid] (45) < target (48) -> 目标在右半部分。
    • 更新 left = mid + 1 = 9 + 1 = 10
    • 新查找范围 [10, 12]
  4. 第 3 次迭代:

    • mid = left + (right - left) / 2 = 10 + (12 - 10) / 2 = 10 + 2 / 2 = 10 + 1 = 11
    • arr[mid] = arr[11] = 49
    • arr[mid] (49) > target (48) -> 目标在左半部分。
    • 更新 right = mid - 1 = 11 - 1 = 10
    • 新查找范围 [10, 10]
  5. 第 4 次迭代:

    • mid = left + (right - left) / 2 = 10 + (10 - 10) / 2 = 10 + 0 / 2 = 10
    • arr[mid] = arr[10] = 48
    • arr[mid] (48) == target (48) -> 找到目标!
    • 返回索引 mid = 10

如果查找 target = 6 (不存在):

  • …经过几次迭代后…
  • 假设某次迭代后 left = 1, right = 0
  • 此时 left > right,循环条件 while (left <= right) 不满足,循环结束。
  • 表示未找到目标值。

Java 代码实现

下面是二分查找的 Java 代码实现(迭代版本),与你提供的一致,并包含了一些好的实践:

import java.util.Arrays; // 如果你想方便地打印数组,可以导入 Arrays 类public class BinarySearch { // 类名建议大写开头
http://www.dtcms.com/a/500766.html

相关文章:

  • 网站建设公司团队简介wordpress 主题 模板
  • 建设一个网站用什么搭建电商网站开发建设
  • iis 网站制作网站设计项目书
  • 【C语言初阶】分支和循环语句_for循环
  • 有什么做网站的国企图做的好的网站
  • 织梦做的网站在手机上显示优秀室内设计案例分析
  • 抚宁建设局网站建设企业网站注意事项
  • MySQL——用户权限和管理
  • python 微信网站开发深圳外贸网站建设企业
  • 找个免费的网站外贸平台有哪些用户量大的
  • 数据结构之线性表——双链表的操作
  • 【边打字.边学经典故事】_1_太甲明德
  • 深圳自助建站图书馆网站建设的规章制度
  • 在哪下载.net网站作品深圳网站制作的公司深圳app开发
  • 公司网站经典案例好多公司为啥只做网站 不考虑推广
  • 数据结构 06 线性结构
  • 百事可乐网站建设优缺点东莞哪家纯设计公司做得好
  • 手机移动网站建设方案溧阳做网站价格
  • 扬州市江都区城乡建设局网站大连唐朝网站优化公司
  • ChatDoctor
  • 微信做的地方门户网站郑州 网站建设 东区
  • 协程:深入协程机制与实现(进阶篇)
  • Linux使用Docker部署项目后期更新
  • 网站建设优化兼职在家网站编程设计方向
  • SSM养生知识平台99ofs(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 前端网站做多语言优秀网站页面设计图片
  • phpcms学校网站模板安徽城乡住房建设厅网站
  • 做网站宁波大点的网络公司快速搭建网站 优帮云
  • 织梦网站模板套用扮家家室内设计
  • 网站建设覀金手指科杰全国公共建筑信息平台