静态查找算法:仅对查找表进行查找操作,不改变表
一、顺序查找
算法思想:从表的一端开始,向另一端逐个按给定值kx与关键字进行比较,若找到,查找成功,并返回位置;若检测完毕,仍未找到,返回错误信息。
算法的时间复杂度:o(n)
优点:对表中数据的存储没有要求,线性链表只能进行顺序查找
缺点:当n很大时,平均查找长度达,效率低。
package com;
public class Find {
public static void main(String args[]){
//数组
int find[] = {1,3,6,9,7,5,8};
int stat = findKey(find,3);
System.out.println(stat);
int stat2 = findKeyR(find,78);
System.out.println(stat2);
}
//顺序查找,从前往后,查找失败返回长度
public static int findKey(int _find[], int key){
int len = _find.length;
int i;
for(i = 0; i < len && _find[i] != key;i++);
return i;
}
//顺序查找,从后往前,查找失败返回-1
public static int findKeyR(int _find[], int key){
int len = _find.length;
int i;
for(i = len-1; i >= 0 && _find[i] != key;i--);
return i;
}
}
二、折半查找(二分查找
)
折半查找是针对有序表的,即表中的数据元素按关键字升序或降序排列的表。
前提要求:1.必须采用顺序存储结构 2.必须按关键字大小有序排列
算法的时间复杂度:o(log(n))
优点:比较次数少,查找速度快,平均性能好;
缺点:要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
算法思想:
首先,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
package com;
public class Search {
public static void main(String args[]){
//数组
int find[] = {1,3,6,7,8,12,23};
int stat = BinarySearch(find,12);
System.out.println(stat);
}
//折半查找
public static int BinarySearch(int _find[], int key){
int len = _find.length;
//设定返回值,失败时返回-1;
int flag = -1;
//区间下界
int low = 0;
//区间上界
int high = len-1;
//中间位置
int mid;
while(low <= high){
mid = (low + high)/2;
if(_find[mid] < key){
low = mid + 1;
}else if(_find[mid] > key){
high = mid - 1;
}else{
flag = mid;
break;
}
}
return flag;
}
}
三、其他查找
插值查找
:也是针对有序表的,和二分插值的区别是,mid的取值规则
mid = low+(key-array[low])*(high-low)/(array[high]-array[low])
平均性能最好,只适合关键字平均分布的表 ,算法的时间复杂度:o(log(n))
分块查找:
又称索引顺序查找,是对顺序查找的改进。
算法思想:将查找表分为若干个子表,每个子表分块有序,对子表建立索引表,查找表的每一个子表由索引表中的索引项确定。
(1)首先用给定值key在索引表中检测索引项,以确定所要进行的查找在查找表中的查找分块,索引表关键字有序,可使用折半查找;
(2)对该分块进行顺序查找。
平均查找长度:索引表的平均长度和子表的平均长度的和。
m个数据元素,n个子表, 平均查找长度为(m+n/m)/2+1,当m=sqrt(n)时平均长度最小。
分享到:
相关推荐
静态查找表。实现有序表的折半查找算法 静态查找表。实现有序表的折半查找算法 静态查找表。实现有序表的折半查找算法静态查找表。实现有序表的折半查找算法
静态查找表技术 依据顺序查找算法和折半查找算法的特点,对下面的两个查找表选择一个合适的算法 ,设计出完整的C源程序。并完成问题: 查找表1 : { 8 ,15 ,19 ,26 ,33 ,41 ,47 ,52 ,64 ,90 } ,查找key =...
静态查找表算法
查找相关算法,包含完整源码,在vs2013调试通过
各种查找算法性能比较 ①静态查找 折半查找和斐波拉契查找(有序) ②动态查找 二叉排序树的基本操作 任务: 编写算法实现对依次输入的关键字序列建立二叉排序树 并能实现二叉排序树的查找 插入和删除运算 ...
查找是信息处理中常用的操作.对顺序查找和折半查找两种静态查找算法的性能进行了分析,并给出了相应算法平均查找长度的计算方法,以便应用软件设计者选择合适的查找算法,优化系统性能.
数据结构,静态查找表,C语言开发,界面友好,绝对有价值!!!
广工的数据结构实验报告-静态查找表,你懂得……
静态查找和动态查找 内查找和外查找 顺序查找又称线性查找(Sequential Search) 二叉查找算法:二分查找又称折半查找(Binary Search)
2、熟练掌握顺序表的查找方法和有序顺序表的折半查找算法以及静态查找树的构造方法和查找算法。 3、掌握二叉排序树的生成、插入、删除、输出运算。 二、实验内容 1、有序顺序表的二分查找的递归算法
非常棒的数据结构程序演示 ,分为Pascal语言和C语言版,其中包含 顺序表 广义表 动态查找 静态查找 二叉树 链表 栈 串 稀疏矩阵 储存管理 内部排序 外部排序等等 只需解压即可
静态查找和动态查找,在上述内容的基础上,将所有查找算法整合在一个程序中。学生可参考教材中的伪代码。鼓励学生自创新思路,新算法。
算法静态查找表PPT学习教案.pptx
静态查找表上的查找 ,动态查找表上的查找 ,散列表上的查找
18.两种以上查找算法综合比较及应用(实例说明,具体数据,复杂度分析) 19. 字符串的的两种以上排序算法实现及性能分析(实例说明,具体数据,复杂度分析) 20. 递归算法与非递归算法的比较与复杂度分析(实例说明...
静态查找表及查找算法:顺序查找、折半查找 动态查找表及查找算法:二叉排序树 哈希表及查找算法 算法分析与实现
1) 理解查找的概念; (2) 掌握静态查找表的方法; (3) 熟悉并能运用散列技术解决实际问题; (4) 熟悉线性索引以及树形索引
静态查找表(Static Search Table):只做查找操作的查找表。它的主要操作是: 查询某个“特定的”数据元素是否在表中 检索某个“特定的”数据元素和各种属性 动态查找表(Dynamic Search Tabl
顺序查找
C++模板类实现的动态数组、双向循环链表、队列、栈等数据结构,以及基于迭代器的静态查找和排序算法,包括顺序查找、折半查找、简单选择排序(用于单向迭代器)、快速排序(双向迭代器)、堆排序(随机迭代器)。...