程序员应该了解的查找(java实现)
来源:互联网 发布:淘宝中老年服装模特 编辑:程序博客网 时间:2024/06/14 20:49
上一星期写了关于排序的几篇博文,得到很多道友的支持,在这里非常感谢。
相比较排序来说,今天所说的查找就简单多了,今天我们先来说:
1, 顺序查找
2, 折半查找
一、顺序查找的基本思想:
从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。
说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效率低。
适用于线性表的顺序存储结构和链式存储结构。
计算平均查找长度。
例如上表,查找1,需要1次,查找2需要2次,依次往下推,可知查找16需要16次,
可以看出,我们只要将这些查找次数求和(我们初中学的,上底加下底乘以高除以2),然后除以结点数,即为平均查找长度。
设n=节点数
平均查找长度=(n+1)/2
用Java实现:
二、二分法查找(折半查找)的基本思想:
前提:
(1)确定该区间的中点位置:mid=(low+high)/2
min代表区间中间的结点的位置,low代表区间最左结点位置,high代表区间最右结点位置
(2)将待查a值与结点mid的关键字(下面用R[mid].key)比较,若相等,则查找成功,否则确定新的查找区间:
如果R[mid].key>a,则由表的有序性可知,R[mid].key右侧的值都大于a,所以等于a的关键字如果存在,必然在R[mid].key左边的表中。这时high=mid-1
如果R[mid].key<a,则等于a的关键字如果存在,必然在R[mid].key右边的表中。这时low=mid+1
如果R[mid].key=a,则查找成功。
(3)下一次查找针对新的查找区间,重复步骤(1)和(2)
(4)在查找过程中,low逐步增加,high逐步减少,如果low>high,则查找失败。
平均查找长度=Log2(n+1)-1
注:虽然二分法查找的效率高,但是要将表按关键字排序。而排序本身是一种很费时的运算,所以二分法比较适用于顺序存储结构。为保持表的有序性,在顺序结构中插入和删除都必须移动大量的结点。因此,二分查找特别适用于那种一经建立就很少改动而又经常需要查找的线性表。
所以说用折半查找时序列必须是有序的!
用java实现:
- 程序员应该了解的查找(java实现)
- 程序员应该了解的查找(java实现)
- 程序员应该了解的查找(java实现)
- 程序员应该了解的查找(java实现)
- 程序员应该了解的查找(java实现)
- 应该了解的-java
- 程序员应该了解的测试
- 程序员应该了解的数字
- JAVA程序员应该了解的10个JSP标签库
- JAVA程序员应该了解的10个JSP标签库
- Java程序员应该了解的10个面向对象…
- Java程序员应该了解的10个设计原则
- Java程序员应该了解的第三方工具
- Java程序员应该了解的10个面向对象设计原则(转载)
- 每个程序员都应该了解的内存知识(一)
- 每个程序员都应该了解的内存知识(二)
- 每个程序员都应该了解的 CPU 高速缓存(一)
- javascript的程序员都应该了解的
- 查找某个字符串在一个长字符串中出现的次数
- Javascript函数
- 编译实验二
- 用java 生成窗口
- python 机器学习KNN分类算法
- 程序员应该了解的查找(java实现)
- 获取应用程序下所有Activity
- 分布式系统ID生成器
- 无符号整型被赋值负数的时候出现的陷阱、对图像数据进行操作时要注意数据类型的一致。
- Xcode磁盘空间大清理
- CSS使用网络字体(@font-face)详析
- Nginx + Tomcat 动静分离实现负载均衡
- [Andriod]Andriod之HelloWorld
- UE4中的集合:TSet容器