程序员应该了解的查找(java实现)
来源:互联网 发布:各种软件 编辑:程序博客网 时间:2024/06/08 08:20
相比较排序来说,今天所说的查找就简单多了,今天我们先来说:
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的程序员都应该了解的
- 自适应四元数kalman滤波matlab学习笔记(一)
- C#控件随着窗口大小变化而自动变化
- JFreechart 中文乱码 解决方法
- 数据流重定向、命令执行的判断依据及管道命令
- KNN & NaiveBayes 分类算法
- 程序员应该了解的查找(java实现)
- 深层神经网络结构及可能存在的致命问题详解
- Redis的主从复制,读写分离,哨兵模式详细教程(1)
- UML总结之——UML的结构
- 关于外部测试字段解释冲突
- RabbitMQ从入门到精通----集群模式
- 在线计算惠普HP 服务器功耗的网站
- Activity的切换动画
- 第十六周项目1(3)——直接选择排序