二分查找(binary search),也称折半搜索,是一种在 有序数组查找某一特定元素 的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。

  • 时间复杂度:折半搜索每次把搜索区域减少一半,时间复杂度为O(log n)。(n代表集合中元素的个数)
  • 空间复杂度: O(1)。虽以递归形式定义,但是尾递归,可改写为循环。

递归(自己调用自己)

int binarysearch(int array[], int low, int high, int target) {if (low > high) return -1;int mid = low + (high - low) / 2;if (array[mid] > target)return binarysearch(array, low, mid - 1, target);if (array[mid] < target)return binarysearch(array, mid + 1, high, target);return mid;
}

非递归:

int bsearchWithoutRecursion(int a[], int key) {int low = 0;int high = a.length - 1;while (low <= high) {int mid = low + (high - low) / 2;if (a[mid] > key)high = mid - 1;else if (a[mid] < key)low = mid + 1;elsereturn mid;}return -1;
}

Java实现二分查找算法相关推荐

  1. 二分查找算法java

    二分查找又称折半查找,它是一种效率较高的查找方法. 折半查找的算法思想是将数列按有序化(递增或递减)排列,查找过程中采用跳跃式方式查找,即先以有序数列的中点位置为比较对象,如果要找的元素值小于该中点元 ...

  2. java 二分查找_JAVA 实现二分查找算法。我知道你会,但没你想象的那么简单

    二分查找算法定义:二分查找(binary search),也称折半搜索,是一种在 有序数组 中 查找某一特定元素 的搜索算法.搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结 ...

  3. Java 二分查找算法及效率比较

    1.前提:二分查找的前提是需要查找的数组必须是已排序的,我们这里的实现默认为升序 2.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的那个值)前,中值,中值后:将要查找的值和数组的中值 ...

  4. 二分查找算法(递归与非递归两种方式)

    首先说说二分查找法. 二分查找法是对一组有序的数字中进行查找,传递相应的数据,进行比较查找到与原数据相同的数据,查找到了返回1,失败返回对应的数组下标. 采用非递归方式完成二分查找法.java代码如下 ...

  5. java实现二分查找-两种方式

    二分查找是一种查询效率非常高的查找算法.又称折半查找.起初在数据结构中学习递归时实现二分查找,实际上不用递归也可以实现,毕竟递归是需要开辟额外的空间的来 辅助查询.本文就介绍两种方法二分查找算法思想有 ...

  6. list 查找_五千字长文带你学习 二分查找算法

    点击上方"与你一起学算法",选择"星标"公众号 重磅干货,第一时间送达 二分查找的思想 提及二分查找算法,我想大部分人都不陌生,就算不是学计算机的,基本上也都使 ...

  7. 二分查找算法应用-实现求平方根函数

    使用二分查找算法,尽可能的逼近求解平方根.算法的思路很简单:设置三个标识:left=0,right=x(x为输进去的被开方数) mid=(left+right)/2,然后用mid*mid-x的绝对值去 ...

  8. 关于《算法(第四版 谢路云译)》标准库In、Out、StdOut和StdIn的正确配置和调用经验分享(以BinarySearch二分查找算法为例)

    本人初学<算法(第四版 谢路云译)>有一段时间了,对于初学者按书敲完第一个BinarySearch二分查找算法发现运行错误,我相信大家跟我一样内心是崩溃的.还好经过翻看多个相关论坛以及自己 ...

  9. 二分查找算法的万能公式(LeetCode35、704、1095)

    二分查找常常用于有序数组的查找操作.当然如果是一个问题,数组的顺序满足特定条件(不仅仅是升序或者降序,也可以是先升后降或先降后升),就可以通过逐步排查,缩小问题的规模的方式找到,这种算法也是二分查找算 ...

最新文章

  1. C# 尝试读取或写入受保护的内存,这通常指示其他内存已损坏。错误类型为:System.AccessViolationException。...
  2. 在不是Thread类的子类中,如何获取线程对象的名称呢?
  3. leetcode83 删除排序链表中的重复元素
  4. Linux 6安装kde桌面,CentOS 5/6 安装 GNOME 或 KDE 桌面
  5. 简便无刷新文件上传系统
  6. 新机发布会用鸿蒙吗,鸿蒙操作系统及华为全场景新品发布会即将到来,硬件生态发展有望迎来加速度...
  7. 编译安装imagick出错:make: *** [imagick_class.lo] Error 1
  8. 大工18春《c和c语言程序设计》,东大21春《高级语言程序设计基础》在线平时作业1题目及答案...
  9. Acronis Disk Director 增大c盘
  10. 二次解析视屏 php,最新PHP二次视频解析源码 带后台版
  11. git基本命令、提交pr
  12. php 方法名前加 amp,PHP的返回引用(方法名前加)
  13. 13 标准模板库STL【C++】
  14. swift和swiftui_SwiftUI和UIStackflow问题
  15. 微信小程序顶部下拉菜单栏
  16. BZOJ4372: 烁烁的游戏(动态点分治)
  17. 《嵌入式 - Lwip开发指南》第3章 移植LWIP(无系统)
  18. InstallShield 2010集成 net Framework 4的安装包制作
  19. c语言翻转棋ai算法,黑白棋游戏(也叫翻转棋)(AI 版)
  20. 36岁女博士找教职之路,真的懵了....

热门文章

  1. vue实现对数据的增删改查(CURD)
  2. jeecg中的树形控件demo
  3. java 注解(annotation)基础学习
  4. WPF 学习笔记 路由事件
  5. 配置文件是什么东西?
  6. 什么是c语言内存编码,c语言内存泄露示例解析
  7. 图片抓取_小小爬虫批量抓取微信推文里的图片
  8. php+go+to,让phpstrom支持codeigniter框架实现 (GO TO )转到定义的功能
  9. python中如何调用类takes no arguments_关于python中的 take no arguments 的解决方法
  10. Linux驱动实现灯循环闪烁,TQ2440上LED灯闪烁效果的驱动程序实现