OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3489|回复: 0

【算法】二分搜索方法 收藏防迷路

[复制链接]

143

主题

145

帖子

0

精华

高级会员

Rank: 4

积分
585
金钱
585
注册时间
2020-5-25
在线时间
42 小时
发表于 2020-11-10 16:31:21 | 显示全部楼层 |阅读模式

  二分搜索法运用了分治策略。给定已经排好序的n个元素,在这个n个元素中查找一个特定的元素x。

        二分搜索法的基本思想是将n个元素分成个数大致相同的两半,取arr[n/2]与x进行比较。如果x=arr[/2],则找到x,算法终止。如果x<arr[n/2],则只要在数组a的左半部分继续搜索x。如果x>arr[a/2],则只要在数组arr的右半部分继续搜索x。

java实现代码:


  •     public static void main(String[] args) {



  •         int[] arr = {2, 7, 12, 15, 17, 21, 33, 36, 45, 65, 77, 79, 90};



  •         System.out.println(binarySearch(arr, 79));



  •     }







  •     public static int binarySearch(int[] arr, int x) {







  •         int left = 0; //左边界



  •         int right = arr.length - 1; //右边界



  •         while (left <= right) {



  •             int middle = (left + right) / 2; //取中



  •             if (x == arr[middle])



  •                 return middle;



  •             if (x > arr[middle])



  •                 left = middle + 1;



  •             else



  •                 right = middle - 1;



  •         }



  •         return -1;



  •     }


图解一下主要运行步骤:
  • 数组:arr ,红色元素79是我们要查找的元素

      

  • 循环第一次:middle是我们的二分查找指针,这次指针指向了中间,将数组分为两半

      

     未找到,79比33大。接下来left边界向右&#10145;&#65039;移动至middle+1的位置,指针middle重新计算

  • 循环第二次

      

    未找到,79比65大。接下来left边界向右&#10145;&#65039;移动至middle+1的位置,指针middle重新计算

  • 循环第三次

     

    成功 找到目标元素。

---------------------------------------------------------------------

这是数组内查找后边大元素的例子,反之查找前边小元素也是同理,right边界向左&#11013;&#65039;移动至middle+1的位置

参考文本

学习视频资料:http://www.makeru.com.cn/live/1392_1164.html?s=143793


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 06:08

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表