简单查找:
顺序查找:
从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号;若将线性表中所有记录都比较完,扔未找到关键字与给定值相等的记录,则表示查找失败,返回 一个失败值.
public class QuerySearch { public static int[] Data = { 65, 21, 92, 11, 55, 42, 89, 8, 5, 9, 81, 33, 28, 89, 90, 28, 122, 76, 30, 7 }; public static int COUNT = 1; public static void main(String args[]) { int key = 21; if (Linear_Search(key)) { System.out.println(); System.out.println("Search Time = " + COUNT); } else { System.out.println(); System.out.println("No Found"); } } public static boolean Linear_Search(int key) { int i; for (i = 0; i < 20; i++) { System.out.print("[" + (int) Data[i] + "]"); if ((int) key == (int) Data[i]) return true; COUNT++; } return false; } }
折半查找:
又称为二分查找.这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字的由小到大有序排列.
public class BinarySearch { public static void main(String[] args) { int[] is = { 1, 4, 7, 12, 23, 34, 45, 78 }; int index = binarySearch(is, 1); if (index < 0) { System.out.println("没有当前值存在"); return; } System.out.println(index); } public static int binarySearch(int[] is, int key) { int low = 0, high = 0, mid = 0; high = is.length; while (high >= low) { mid = (high + low) / 2; if (is[mid] == key) { return mid; } else if (is[mid] > key) { high = mid - 1; } else if (is[mid] < key) { low = mid + 1; } } return -1; } }
二叉排序树:
二叉排序树或者是一棵空树,或者是一棵具有以下性质的二叉树:
(1)若它有左子树,则左子树上的所有结点都小于根结点数据.
(2)若它有右子树,则右子树上的所有结点都大于根结点数据.
(3)左右子树各是一棵二叉排序树.
二叉排序树删除节点(有左右子树)
删除无右子树节点
删除无左右子树
索引查找:
对大量数据进行查找时块,索引要多占用空间,更新时不仅要更新主表,也要更新索引表.
1.在索引表中进行查找.
查找过程如下:
(1)首先根据给定的关键字key,按定义的函数计算出索引值index1,在索引表上查找出索引值等于index1的索引项,以确定对应子表在主表中的开始位置和长度.
(2)接着根据从索引表中获取的开始序号start,在主表指定的位置(即子表的开始处)顺序查找关键字key.
2.向主表中插入数据.
在线性表的索引存储结构上进行插入删除运算的算法,与查找算法类似.其具体过程如下:
(1)根据待插入的元素的值查找索引表,确定出对应的子表.
(2)接着,根据待插入元素的关键字,在该子表中做插入元素的操作.
(2)插入完成后,修改索引表中相应子表的长度.
哈希表:
哈希表的基本思想是:以线性表中每个元素的关键字key为自变量,通过一定的函数关系h(key)计算出函数的值,把这个值作为数组的下标,将元素存入对应的数组元素中.
函数h(key)称为哈希函数,函数的值称为哈希地址.
缺点1:可能浪费空间
缺点2:可能发生冲突
常用的构造哈希函数的方法:
>直接定址法(关键字本身或者关键字加上某一个常数直接作为地址,一般要求关键字连续不重复)
>除法取余法(一般除数选择奇数或者素数)
>数字分析法(对关键字的某些部分进行分析)
>平方取中法(平方取中)
>折叠法(用关键字拆分成长度相等的几段再相加)
可以根据数据特点自己构造适合的哈希函数
处理冲突的方法:
>开放地址法.
>链接法.
相关推荐
本压缩包“MFC动态演示线性查找和折半查找.zip”提供了使用MFC实现的两种常见查找算法的动态演示:线性查找和折半查找。 **线性查找(Linear Search)** 线性查找是最基础的查找算法之一,适用于任何无序或有序的...
本文将对几种常用的查找算法进行比较,包括顺序查找、二分查找、二叉树查找和哈希表查找。 顺序查找是一个最简单的查找算法,它的时间复杂度为O(n),其中n是数组的长度。该算法的实现非常简单,只需要遍历数组,并...
本资源“查找与排序源代码”提供了一些常见查找和排序算法的编程实现,帮助学习者通过实践来理解这些算法的工作原理。 首先,我们来看查找算法。查找算法的主要目的是在数据集合中找到特定元素的位置或值。其中,...
本文将深入探讨一些Word中的常见查找与替换实例,以及如何利用正则表达式进行高级操作。 首先,我们要理解查找与替换的基本用法。在Word中,可以通过点击菜单栏的"开始" > "编辑" > "查找"或使用快捷键Ctrl+F来打开...
- 虽然文档中没有具体讨论查找算法,但在Java中,常见查找算法包括线性查找、二分查找、哈希查找等。线性查找适用于未排序或部分排序的数据,而二分查找适用于有序数组,哈希查找则通过哈希表提供快速的查找能力。 ...
实验5主要探讨了查找算法,包括在无序表和有序表中的两种常见查找方法:顺序查找和折半查找。这两种算法都是数据结构和算法领域的基础,对于理解和优化数据检索至关重要。 1. **顺序查找**:在无序表中,顺序查找是...
本章主要讨论了顺序查找、折半查找、二叉排序树和散列查找等几种常见查找方法。 1. **顺序查找**:顺序查找适用于任何存储结构的线性表,不论是顺序存储(如数组)还是链接存储(如链表)。它从表的一端开始逐个...
常见查找算法包括: 1. **线性查找**:从头到尾遍历序列,直到找到目标元素或搜索完整个序列。时间复杂度为O(n)。 2. **二分查找**:适用于有序数组,通过不断取中间元素与目标比较来缩小搜索范围。时间复杂度为O...
本篇内容主要围绕查找技术展开,特别是线性查找和折半查找两种常见查找方法。 线性查找表是一种基本的数据结构,其中数据元素按照线性顺序存储。在查找过程中,我们从表的一端开始,逐个比较数据元素的关键字与目标...
描述提到“常用算法集(C语言描述)”,这意味着我们将探讨用C语言实现的常见查找策略。这里,我们将深入讨论几种常见的查找算法,并结合C语言的实现来理解它们的工作原理和效率。 1. **顺序查找(Sequential ...
C 语言几种常见的查找算法 本篇文章总结了几种常用的查找算法,包括静态查找、顺序查找、索引顺序表查找、折半查找和次优查找树等。这些算法都是在C语言中实现的,旨在帮助读者更好地理解和应用这些查找算法。 一...
下面,我们将深入探讨C++中的几种常见查找算法及其应用。 1. **线性查找(Linear Search)**: - 线性查找是最基础的查找方法,适用于未排序的数组或列表。它从数组的第一个元素开始,逐个与目标值比较,直到找到...
常见查找算法有: 1. 线性查找:从头到尾遍历数组,直到找到目标元素或遍历完数组。 2. 二分查找:适用于有序数组,通过不断缩小查找范围,提高查找效率。 3. 哈希查找:通过哈希函数将元素映射到特定位置,查找...
以下是四种常见的查找算法:顺序查找、二分查找、插值查找和动态查找。 顺序查找 顺序查找是一种最简单的查找算法,它的实现方式是从数组或链表的第一个元素开始,逐个比较元素直到找到目标元素或达到数组或链表的...
静态查找表的常见查找算法有顺序查找、折半查找、静态树表查找和分块查找。顺序查找简单但效率较低,折半查找效率较高但需要有序数据,静态树表查找和分块查找则是为了优化查找过程。 总的来说,这个数据结构课程...
常见查找算法 - **顺序查找**:从头到尾依次检查每一个元素,直到找到目标元素或遍历完所有元素。 - **二分查找**:前提条件是数组必须是有序的,每次都将查找区间分成两半,只在其中一半进行后续查找。 - **哈希...
常见查找方法有: 1. **顺序查找**:这是最基本的数据查找方法,适用于有序或无序的序列,但其时间复杂度为O(n),在大数据量下效率较低。 2. **二分查找**:适用于有序数组,通过不断比较中间元素来缩小查找范围,...
9.29题没有提供具体内容,但根据前面的题目,我们可以推测这可能是一个关于其他查找算法或者改进的查找策略的问题,如二叉搜索树、哈希表等,这些也是数据结构中的常见查找方法。 总的来说,这些习题覆盖了数据结构...