Java经典算法之折半查找(二分法)
2024-08-30 21:12:54
采用二分法时,数据应是有序并且不重复的
与小时候玩的猜数游戏是一样的,会让你猜一个他所想的1~100之间的数,当你猜了一个数后,他会告诉你三种选择中的一个,比他想的大,或小,或猜中了,为了能用最少的次数猜中,必须从50开始猜,如果说你猜的小,那你必须从51~100开始猜,所以下一次猜的是75(51~100的一半),但如果他说有点大,则推出那个数在1~49之间,所以下一次猜25,每猜一次都将可能的值化为两部分
实现思想:假设数据是升序排序的,给一个定值x,从序列的中间位置开始查找,若x小于当前位置值,则在序列的前半段中查找,并再将数据一分为二
若x大于当前位置值,则在序列的后半段中查找,再将数据一分为二
若当前位置值等于x,则直接返回,如果没有找到则返回-1
实现代码:
public class Half { public static void main(String[] args) { int[] arr = new int[]{12, 23, 34, 45, 56, 67, 77, 89, 90};//length:9 System.out.println(search(arr, 34)); } public static int search(int[] arr, int key) { int start = 0; while (start <= end) { int middle = (start + end) / 2;//中间值:4,1,2 if (key < arr[middle]) { end = middle - 1; } else if (key > arr[middle]) { start = middle + 1; } else { return middle; } } return -1; } } //输出2
最新文章
- Linux下添加apache虚拟主机
- Yii2 使用小部件 Breadcrumbs
- JqueryTips小实验,浏览器滚动条不限制
- 【CSS3】Advanced10:Gradient
- Struts学习之自定义结果集
- 设计模式总结(Java)—— 适配器模式
- Hibernate由model类自动同步数据库表结构
- Java连接FTP成功,但是上传是失败,报错:Connected time out
- systemverilog中实现饱和截位和饱和截位的分析
- hdu1256
- vue+elementUI表格列显示隐藏遇到bug
- 构建NTP时间服务器
- mapreduce的cleanUp和setUp的特殊用法(TopN问题)和常规用法
- ReactiveCocoa(II)
- MySQL 常用使用语句
- flask session,蓝图,装饰器,路由和对象配置
- ASP.NET MVC的ContentResult
- es6笔记(4) Set数据结构
- windows(64位)下使用curl命令
- ios开发之NSString用strong还是用copy?
热门文章
- PLSQLDeveloper安装与配置(详细图文)
- Codeforces700C. Break Up
- 自定义日志工具LogUtil
- AjaxFileUpload文件上传组件(php+jQuery+ajax)
- ubuntu忘记root密码的解决办法
- Linux下tmp文件夹的文件自动删除的问题(转)
- Ubuntu 16.04错误:正在读取软件包列表... 有错误! E: Encountered a section with no Package: header E: Problem with MergeList /var/lib/apt/lists/ppa.launchpad.net_t-tujikawa_ppa_ubuntu_dists_xenial_main_i18n_Translatio
- JSP中HTTP状态码
- html5 编辑
- 8VC Venture Cup 2016 - Final Round (Div2) E