静态查找算法:仅对查找表进行查找操作,不改变表
一、顺序查找
算法思想:从表的一端开始,向另一端逐个按给定值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)时平均长度最小。
分享到:
相关推荐
### 静态查找表与折半查找算法 在计算机科学中,静态查找表是一种用于存储数据并能够高效检索特定元素的数据结构。本篇文章将详细解释如何实现一个静态查找表,并利用折半查找算法(也称二分查找算法)来查询表中的...
静态查找表算法
实验七的主题是“查找”,主要涉及查找表、动态查找表、静态查找表和平均查找长度的概念,以及线性表中的顺序查找和折半查找方法。...通过这些练习,学生能深入理解查找算法和哈希表的工作原理,提高编程能力。
本实验项目“查找”旨在通过实际编程加深对查找算法的理解,包括顺序查找、折半查找以及在二叉排序树上的操作。 1. 折半查找(Binary Search): 折半查找是一种在有序数组中查找特定元素的搜索算法。它通过比较...
数据结构是计算机科学中的...通过这个实验,你将深入理解静态查找表的工作原理,掌握查找算法的设计与分析,同时提升编程能力。这将对你未来的学习和工作,特别是在处理数据密集型问题时,提供宝贵的经验和理论基础。
在这一部分,介绍了三种静态查找算法: - **顺序查找(线性查找)**:是最基础的查找算法,从数据结构的一端开始逐个比较,直到找到目标元素或者搜索完整个序列。在等概率情况下,平均查找长度ASL等于序列长度的...
各种查找算法性能比较 ①静态查找 折半查找和斐波拉契查找(有序) ②动态查找 二叉排序树的基本操作 任务: 编写算法实现对依次输入的关键字序列建立二叉排序树 并能实现二叉排序树的查找 插入和删除运算 ...
在本项目中,我们关注的是“静态查找表”,这是一个常见的数据结构,用于快速查找特定元素。静态查找表通常是在内存中预先分配好空间,并且在程序运行期间其大小不会发生变化的数据结构。 在数据结构中,查找操作是...
本设计主要关注静态查找算法和动态查找算法的实现,并通过实际测试对它们的性能进行分析。 首先,静态查找算法主要包括顺序查找和折半查找。顺序查找是最基础的查找方法,其原理是从数组的最后一个元素开始,逐个与...
本篇文章总结了几种常用的查找算法,包括静态查找、顺序查找、索引顺序表查找、折半查找和次优查找树等。这些算法都是在C语言中实现的,旨在帮助读者更好地理解和应用这些查找算法。 一、静态查找 静态查找是指在...
查找算法是计算机科学中的一种基本操作,它涉及在数据集合中定位特定元素的过程,这一过程又称为检索。在不同数据结构上实现查找算法会有不同的方法和性能表现。查找算法通常根据数据的存储方式和查找方法进行分类,...
数据结构中的查找算法是计算机科学中的重要组成部分,它涉及到如何高效地在大量数据中寻找特定信息。查找操作,也就是检索,通常在数据元素的集合,即查找表中进行。查找的效率与查找对象的组织方式和所采用的查找...
本文将详细解析C#中的基础查找算法,包括静态查找与动态查找、内查找与外查找,以及两种具体的查找算法:顺序查找(线性查找)和二叉查找(折半查找)。这些算法在数据处理、数据库操作和优化搜索效率等方面有着广泛...
本章探讨了查找在数据结构中的重要性,特别是静态查找算法和动态查找表,以及哈希表的概念和应用。查找是数据处理中的基础操作,根据给定的关键字在数据集合中寻找匹配的元素。本章内容主要包括查找的基本概念、静态...
在IT领域,静态查找表是一种常见的数据结构,用于快速定位和检索信息。它通常由一组预先确定并固定不变的数据组成,这些数据在程序运行前就已经加载到内存中。静态查找表的优点在于其高效的查找速度,因为查找过程...
静态查找算法包含以下几种: 1. 顺序查找(Sequential Search):这是一种简单直观的查找方法,不需要数据集合有特定的组织结构。它从数据集合的第一个元素开始,逐个比较每个元素的关键字与给定值,直到找到匹配的...
对于有序表,可以使用二分查找算法,效率更高;对于无序表,一般采用线性查找,效率较低。 4. **删除操作**:删除操作通常较为复杂,因为一旦删除一个元素,需要移动后面的元素填补空位,保持数组连续。在C语言中,...
根据所提供的文件信息,本次实验旨在深入理解并实践查找算法,特别是静态查找和动态查找,以及它们在不同数据结构中的应用,如无序表、有序表和二叉排序树。 ### 静态查找 #### 无序表的顺序查找 无序表的顺序...
对于数据结构的实验,报告可能包括了静态查找表的理论概述、算法描述、C代码实现的详细解释、实验环境(如使用wintc编译器)、实验步骤、预期与实际运行结果的对比,以及对实验结果的分析和改进建议。 通过这个...