最基本的查找方法就是顺序查找与二分查找,二分查找可以进一步优化为插值查找
顺序查找
最简单的查找方法,逐个比较过来
public static int seqSearch(int[] arr, int key){ for (int i=0; i<arr.length; i++){ if (key == arr[i]) return i; } return -1; }
二分查找
针对已经有序的数组,可以使用二分查找,又称折半查找
public static int binarySearch(int[] arr, int key){ int low =0; int high = arr.length -1; while(low <= high){ int mid = (low + high)/2; ++bcount; if (key>arr[mid]) { low = mid + 1; } else if (key ==arr[mid]){ return mid; } else { high = mid -1; } } return -1; }
插值查找
在折半查找中, mid = (low + high)/2 = low + (high - low)/2,我们将右边的1/2替换为 (key-arr[low])/(arr[high]-arr[low])
- 当key ==arr[low]的时候 mid = low, mid往最左边移动
- 当key== arr[high]的时候, mid=high, mid往最右边活动
可见这是一种更聪明更有倾向性的查找方法
public static int chazhiSearch(int[] arr, int key){ int low =0; int high = arr.length -1; while(low <= high){ ++ccount; int mid = low + ((key-arr[low])*(high-low)/(arr[high]-arr[low])); if (key>arr[mid]) { low = mid + 1; } else if (key ==arr[mid]){ return mid; } else { high = mid -1; } } return -1; }
测试代码
public static void main(String[] args) { int[] array = new int[]{1,2,3,4,5,6,8,9,12,15,18,20}; assert(seqSearch(array, 9) == 7); assert(seqSearch(array, 8)== -1); System.out.println(binarySearch(array, 18)); System.out.println(chazhiSearch(array, 18)); System.out.println("bcount: " + bcount); System.out.println("ccount: " + ccount); }
运行结果:
10 10 bcount: 3 ccount: 2
对于这种分布比较均匀的数列,插值查找的次数要比二分查找少
相关推荐
总结来说,掌握这些基本查找算法对于理解数据结构和算法的基础至关重要。在实际应用中,开发者需要根据数据的特性、查询需求以及性能要求来选择合适的查找算法,以优化程序性能。通过实验和实践,不仅可以深化理论...
数据结构中的查找算法是计算机科学中的重要组成部分,它涉及到如何高效地在大量数据中寻找特定信息。查找操作,也就是检索,通常在数据元素的集合,即查找表中进行。查找的效率与查找对象的组织方式和所采用的查找...
在IT领域,数据结构与算法是基础且至关重要的部分,其中查找算法是解决信息检索问题的关键技术。本主题将深入探讨几种常见的查找算法,包括二分查找(Binsearch)、二叉搜索树(BSTree)、哈希查找(Hash)以及顺序...
数据结构之查找算法.ppt
数据结构中的查找算法是计算机科学领域的一个核心主题,它涵盖了如何高效地在数据集合中定位特定元素的方法。根据所提供的文件信息,本次实验旨在深入理解并实践查找算法,特别是静态查找和动态查找,以及它们在不同...
自己整理的用C语言写的数据结构和排序查找算法。数据结构包括:栈,队列,两个队列实现一个栈,两个栈实现一个队列,二叉树的创建,添加,平衡二叉树天界旋转等,红黑树,创建,添加节点,删除节点,调整。算法包括...
查找是数据结构中基本的操作之一,它的目标是在数据集合中找到特定元素的位置。线性查找是最基础的查找方法,但效率较低,尤其是当数据量大时。为提高查找效率,引入了二分查找算法。二分查找适用于已排序的数组或...
除了基本的查找和排序,数据结构还包括更复杂的结构,如树和图。在“2树与二叉树”和“3图”文件夹中,你可能可以找到关于二叉搜索树、平衡树(如AVL树和红黑树)、图的遍历(深度优先搜索和广度优先搜索)等高级...
哈希表算法实现的C语言源程序 数据结构课程设计用
数据结构查找算法实验报告.doc 本实验报告主要介绍了四种查找算法的实现:顺序查找、折半查找、二叉排序树查找和哈希表查找。实验中,首先要求用户输入一组数据,然后使用四种不同的查找算法对其进行处理。实验的...
通过这个课程设计,学习者不仅可以理解查找算法的基本概念,还能实际操作并体验不同查找方法的性能差异,这对于深入理解数据结构和算法至关重要。对于将来从事软件开发、数据库管理或数据分析等领域的工作,掌握这些...
数据结构——折半查找算法
根据提供的实验报告信息,我们可以详细地探讨数据结构中查找与排序算法的相关知识点,具体包括折半查找、顺序查找、归并排序以及堆排序这四种算法。 ### 一、折半查找 #### 定义与原理 折半查找,也称二分查找,是...
本书分为基本概念、简单数据结构(线性表、栈、队列)、复杂数据结构(树、图)和算法与数据结构应用(排序、查找、算法设计基础)四部分,详细介绍了常用数据结构和算法的基本概念及其不同的实现方法,对各种数据...
此PDF教材可能涵盖这些基本概念,并通过实例代码展示C语言中如何实现这些数据结构和算法。学习者不仅可以了解理论知识,还能动手实践,提升编程能力。通过学习,读者应能理解各种数据结构的特点和适用场景,掌握常见...
算法方面的内容包括选择算法、查找算法、排序算法。本书还较为详细地分析了各种算法的时间复杂度和空间复杂度,介绍了分摊复杂度分析技术。作为各种数据结构和算法的应用,本书给出了图的标准界面及其实现。利用这个...
第7章涉及查找方法,包括线性表、查找树、平衡树、散列表等数据结构中的查找、插入和删除算法。 第8章介绍排序算法,包括常见的排序方法,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。 本书强调在学习...
第4章 基础查找算法 第5章 栈和队列 第6章 BitArray类 第7章 字符串、String类和StringBuioder类 第8章 模式匹配和文本处理 第9章 构建字典:DictionaryBase类和SortedList类 第10章 散列和Hashtaboe类 第11章 链表 ...
本文将深入探讨Java中常见的数据结构,包括链表、树、图、数组和队列,以及相关的搜索和查找算法。 1. 链表:链表是一种动态数据结构,每个元素称为节点,包含数据和指向下一个节点的引用。在Java中,可以使用`...
5. **课程内容**:可能包括基础数据结构的实现、算法设计与分析、复杂度理论、高级数据结构(如堆、B树等)、图算法、排序与查找算法的C#实现、动态规划和贪心策略等。 6. **学习资源**:“C#数据结构与算法_武汉...