Java数据结构与算法之【二分查找】
来源:互联网 发布:在线预约系统asp源码 编辑:程序博客网 时间:2024/06/05 07:40
实际上,我们对数据结构的操作无非是: 插入新的数据项、查找数据项、删除数据项 这三个主要的动作。
二分查找法 是对查找数据项 的这个动作的一个优化手段,它使用的前提为: 数据已经有序。
下面让我们来用Java语言实现这个算法吧!
首先我们选取最简单的数据结构-----数组, 来实现这个算法。
//先定义一个有序的数组int a[ ]={12,22,34,45,54,67,88,102,123,150}
//常规的查找元素,比如查找88是否存在,一般是从a[0],a[1]...开始逐一进行相等的比较,直到匹配到a[6]==88才停下
// 因为该数组已经有序,我们可以使用二分查找法来实现对数组元素查找的优化。算法思路: (1) 对数组正中间咔嚓来一刀,刚好砍到中间恰好是关键部位(刚好是88) 皆大欢喜,直接退出来,不用比较了,就是它了。(真可谓一步到位!)
然而现实往往是不如意的!被砍的中间部位,并非是所要查找的元素,这时候就得比较所查元素与中间项 值得大小,以便缩短比较距离。
选择第二段,也是先砍中间,看看是不是目标元素。否则,继续比较。
也就是说。。。除非我找到你了,不然我会一直砍下去。而且每砍一次,我就离你越来越近。(嘿嘿嘿。。)
一直做某件事,直到。。。 可以用 while(true){ }
最终实现的代码如下:
public int find(int findnum){ //findnum 为所要查找的元素。函数返回 查找到的对应数组元素的角标。int cur;int low=0; // 数组第一个元素角标int high=n-1; 数组最后一个元素角标while(true){ cur=(low+high)/2; if(a[cur]==findnum) // 砍中了 直接跳出来,返回 匹配到的这个元素的角标 return cur; else if(low>high) // 砍过头了,失误了,砍错了。也退出来。 return n; // n对应的a[n]是不存在的~不存在的就是找不到咯。 a[n-1]才是最后一个元素。 else{if(a[cur]>findnum) // 这里做了选择,是第一段还是第二段。并相对应改变 头部或者尾巴。继续砍。 high=cur-1; else low=cur+1; } }到此,二分查找的方法介绍完毕。是不是感觉很简单呢?
阅读全文
0 0
- Java数据结构与算法之二分查找
- Java数据结构与算法之【二分查找】
- 数据结构与算法之二分查找
- 数据结构与算法之二分查找
- 数据结构与算法之二分查找
- 数据结构与算法之二分查找
- 数据结构与算法之二分查找
- java数据结构与算法-递归二分查找
- 【数据结构与算法之查找算法二】二分查找
- 【数据结构与算法】二分查找
- 数据结构与算法------二分查找
- 【数据结构与算法】二分查找
- 【数据结构与算法】二分查找
- 数据结构与算法,二分查找
- 数据结构与算法之二分查找法及其变种
- 数据结构与算法实践 之 二分查找初识
- java数据结构与算法-有序数组二分查找
- 数据结构和算法设计专题之---二分查找(Java版)
- Linux入门:作业规划进程crond
- Android 发送有序广播
- JAVA中的异常处理
- 编程作业-我的解法
- 树状数组模板2
- Java数据结构与算法之【二分查找】
- 操作系统刷题(六)
- [Unity&C#&接口]接口怎样运用到游戏当中
- 18104 练习使用多case解题
- EF的操作
- ubuntu中命令
- python读文件保存到字典,修改字典并写入新文件
- Hibernate单表映射
- OpenCV中CvArr*到底是什么意思?