`

数据结构之基本查找算法

 
阅读更多

最基本的查找方法就是顺序查找与二分查找,二分查找可以进一步优化为插值查找

 

顺序查找

最简单的查找方法,逐个比较过来

 

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

 对于这种分布比较均匀的数列,插值查找的次数要比二分查找少

1
0
分享到:
评论

相关推荐

    3种查找算法——数据结构实验

    总结来说,掌握这些基本查找算法对于理解数据结构和算法的基础至关重要。在实际应用中,开发者需要根据数据的特性、查询需求以及性能要求来选择合适的查找算法,以优化程序性能。通过实验和实践,不仅可以深化理论...

    数据结构之查找算法分析

    数据结构中的查找算法是计算机科学中的重要组成部分,它涉及到如何高效地在大量数据中寻找特定信息。查找操作,也就是检索,通常在数据元素的集合,即查找表中进行。查找的效率与查找对象的组织方式和所采用的查找...

    数据结构几种查找算法

    在IT领域,数据结构与算法是基础且至关重要的部分,其中查找算法是解决信息检索问题的关键技术。本主题将深入探讨几种常见的查找算法,包括二分查找(Binsearch)、二叉搜索树(BSTree)、哈希查找(Hash)以及顺序...

    数据结构之查找算法.ppt

    数据结构之查找算法.ppt

    数据结构-查找算法(代码+报告)

    数据结构中的查找算法是计算机科学领域的一个核心主题,它涵盖了如何高效地在数据集合中定位特定元素的方法。根据所提供的文件信息,本次实验旨在深入理解并实践查找算法,特别是静态查找和动态查找,以及它们在不同...

    C语言数据结构和排序查找算法程序

    自己整理的用C语言写的数据结构和排序查找算法。数据结构包括:栈,队列,两个队列实现一个栈,两个栈实现一个队列,二叉树的创建,添加,平衡二叉树天界旋转等,红黑树,创建,添加节点,删除节点,调整。算法包括...

    数据结构查找、排序、二分查找、折半查找算法

    查找是数据结构中基本的操作之一,它的目标是在数据集合中找到特定元素的位置。线性查找是最基础的查找方法,但效率较低,尤其是当数据量大时。为提高查找效率,引入了二分查找算法。二分查找适用于已排序的数组或...

    数据结构各种查找排序算法的实现

    除了基本的查找和排序,数据结构还包括更复杂的结构,如树和图。在“2树与二叉树”和“3图”文件夹中,你可能可以找到关于二叉搜索树、平衡树(如AVL树和红黑树)、图的遍历(深度优先搜索和广度优先搜索)等高级...

    数据结构哈希表查找算法

    哈希表算法实现的C语言源程序 数据结构课程设计用

    数据结构查找算法实验报告.doc

    数据结构查找算法实验报告.doc 本实验报告主要介绍了四种查找算法的实现:顺序查找、折半查找、二叉排序树查找和哈希表查找。实验中,首先要求用户输入一组数据,然后使用四种不同的查找算法对其进行处理。实验的...

    综合查找算法(顺序查找、折半查找、二叉排序树、哈希表)-数据结构课程设计

    通过这个课程设计,学习者不仅可以理解查找算法的基本概念,还能实际操作并体验不同查找方法的性能差异,这对于深入理解数据结构和算法至关重要。对于将来从事软件开发、数据库管理或数据分析等领域的工作,掌握这些...

    数据结构-折半查找算法

    数据结构——折半查找算法

    数据结构中查找和排序算法实验报告

    根据提供的实验报告信息,我们可以详细地探讨数据结构中查找与排序算法的相关知识点,具体包括折半查找、顺序查找、归并排序以及堆排序这四种算法。 ### 一、折半查找 #### 定义与原理 折半查找,也称二分查找,是...

    算法与数据结构习题答案+课件+参考资料 国防工业出版社 张永 李睿

     本书分为基本概念、简单数据结构(线性表、栈、队列)、复杂数据结构(树、图)和算法与数据结构应用(排序、查找、算法设计基础)四部分,详细介绍了常用数据结构和算法的基本概念及其不同的实现方法,对各种数据...

    数据结构与算法分析--C语言描述_数据结构与算法_

    此PDF教材可能涵盖这些基本概念,并通过实例代码展示C语言中如何实现这些数据结构和算法。学习者不仅可以了解理论知识,还能动手实践,提升编程能力。通过学习,读者应能理解各种数据结构的特点和适用场景,掌握常见...

    算法与数据结构(c++版)电子版

    算法方面的内容包括选择算法、查找算法、排序算法。本书还较为详细地分析了各种算法的时间复杂度和空间复杂度,介绍了分摊复杂度分析技术。作为各种数据结构和算法的应用,本书给出了图的标准界面及其实现。利用这个...

    数据结构与算法教程

    第7章涉及查找方法,包括线性表、查找树、平衡树、散列表等数据结构中的查找、插入和删除算法。 第8章介绍排序算法,包括常见的排序方法,如冒泡排序、选择排序、插入排序、快速排序、归并排序等。 本书强调在学习...

    数据结构与算法(C#)

    第4章 基础查找算法 第5章 栈和队列 第6章 BitArray类 第7章 字符串、String类和StringBuioder类 第8章 模式匹配和文本处理 第9章 构建字典:DictionaryBase类和SortedList类 第10章 散列和Hashtaboe类 第11章 链表 ...

    数据结构与算法.pdf

    本文将深入探讨Java中常见的数据结构,包括链表、树、图、数组和队列,以及相关的搜索和查找算法。 1. 链表:链表是一种动态数据结构,每个元素称为节点,包含数据和指向下一个节点的引用。在Java中,可以使用`...

    武汉大学 C#数据结构与算法

    5. **课程内容**:可能包括基础数据结构的实现、算法设计与分析、复杂度理论、高级数据结构(如堆、B树等)、图算法、排序与查找算法的C#实现、动态规划和贪心策略等。 6. **学习资源**:“C#数据结构与算法_武汉...

Global site tag (gtag.js) - Google Analytics