数据结构--6.3查找算法(静态、动态)(插值查找)

这篇具有很好参考价值的文章主要介绍了数据结构--6.3查找算法(静态、动态)(插值查找)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

静态查找:数据集合稳定,不需要添加,删除元素的查找操作。

动态查找:数据集合在查找的过程中需要同时添加或删除元素的查找操作。

对于静态查找来说,我们不妨可以用线性表结构组织数据,这样可以使用顺序查找算法,如果我们在对关键字进行排序,则可以使用折半查找算法或斐波那契查找算法来提高查找的效率。

 顺序查找又叫线性查找,是最基本的查找技术,他的查找过程是:

        从第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功;如果查找了所有的记录仍然找不到与给定值相等的关键字,则查找不成功。

对于动态查找来说,我们则可以考虑使用二叉排序树的查找技术,另外我们还可以使用散列表结构来解决一些查找问题。

///简易的查找算法
#include <stdio.h>
//方法1 
int Sq_Search(int *a,int n,int key)
{
	int i;
	for(i=1;i<=n;i++)
	{
		if(a[i] == key)
		{
			return i;
		}
	}
	return 0;
 } 
 
 //方法2 
int Sq_Search(int *a,int n,int key)
{
	int i;
	a[0] = key;
	while(a[i] != key)
	{
		i--;
	}
	return i;
}

一、插值查找(按比例查找)

int bin_search(int str[],int n,int key)
{
	int low,high,mid;
	low = 0;
	high = n-1;
	while(low <= high)
	{
		mid = low + (key-a[low]/a[high] - a[low])*(high - low); //插值查找的唯一不同点 
		if(str[mid] == key)
		{
			return mid;
		}
		if(str[mid] < key)
		{
			low = mid+1;
		}
		if(str[mid] > key)
		{
			high = mid - 1;
		}
	}
	return -1;
 } 

二、斐波那契查找算法(黄金比例  0.618:1)

——斐波那契函数(F[k])

1,1,2,3,5,8,13,21,34,55,89……

(折半查找,选在0.618的位置)文章来源地址https://www.toymoban.com/news/detail-696185.html

到了这里,关于数据结构--6.3查找算法(静态、动态)(插值查找)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数据结构(七)】查找算法

    在 java 中,我们常用的查找有四种:     ① 顺序(线性)查找     ② 二分查找/折半查找     ③ 插值查找     ④ 斐波那契查找 问题:     数组arr[] = {1, 9, 11, -1, 34, 89},使用线性查找方式,找出11所在的位置。 代码实现: 运行结果: 问题:     请

    2024年02月04日
    浏览(48)
  • 数据结构与算法:树形查找

    左子树结点值 根结点值 右子树结点值 对二叉排序树进行中序遍历,可以得到一个递增的有序数列 原理: 对于一个给定的二叉排序树,如果要查找一个节点,可以按照以下步骤进行: 从根节点开始比较。 如果要查找的值等于当前节点的值,则找到了目标节点,返回该节点。

    2024年02月06日
    浏览(41)
  • 数据结构与算法之查找: 顺序查找 (Javascript版)

    顺序查找 思路 遍历数组 找到跟目标值相等元素,就返回它的下标 没有找到,返回-1 算法实现 总结 非常低效,算是入门搜索 时间复杂度:O(n) 对于数组结构或链表结构而言,没什么太多可说的

    2024年02月05日
    浏览(47)
  • 数据结构,查找算法(二分,分块,哈希)

    一、查找算法         1、二分查找:(前提条件: 必须有序的序列) 2、分块查找:(块间有序,块内无序)     索引表  +  源数据表     思路:     (1)先在索引表中确定在哪一块中     (2)再遍历这一块进行查找 //索引表 typedef  struct  {     int max; //块中最大值

    2024年02月11日
    浏览(56)
  • 【数据结构与算法】查找(Search)【详解】

    【知识框架】 查找(Searching) :就是根据给定的某个值,在查找表中确定一个其等于给定值的数据元素( 或记录)。 查找表(Search Table) :是由同一类型的数据元素(或记录)构成的集合。 (Key):数据元素中唯一标识该元素的某个数据项的值,使用基于的查找,查

    2024年02月02日
    浏览(47)
  • 【数据结构与算法】python实现二分查找

    二分查找 又称折半查找,它是一种效率较高的查找方法 原理:首先,假设表中元素是按升序排列,将表中间位置记录的与查找比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的大于查找,则

    2024年02月05日
    浏览(40)
  • 数据结构实验报告(四)——查找和排序算法

    1. 掌握顺序查找技术和拆半查找技术以及部分排序算法的设计思想; 2. 掌握查找、部分排序算法的实现与执行过程。 查找算法 1.顺序查找: 从数组第一个元素开始逐个比较,找到后返回相应下标。 2.折半查找: 从数组中间开始比较,如果需查找值比中间值大,则在中间值右

    2024年02月07日
    浏览(41)
  • 数据结构和算法之二分法查找

    二分法查找,也称作 二分查找 或 折半查找 ,是一种在有序数组中快速查找特定元素的算法。它采用分治法思想,通过将问题划分为规模更小的子问题,并且通过对子问题的查找来解决原问题。 二分法查找的思路是不断地将数组一分为二,然后判断目标值在哪一部分,进而

    2024年02月09日
    浏览(45)
  • 头歌(C语言)-数据结构与算法-查找-第1关:实现折半查找

    任务描述 相关知识 编程要求 测试说明 任务描述 本关要求通过补全函数 BSL_FindKey 来实现在已排序的顺序表中查找关键码值为 key 的结点并返回该结点的编号。 相关知识 折半查找通常是针对顺序存储的线性表,线性表的结点按关键码从小到大排序,后面称之为折半查找的顺序

    2024年02月10日
    浏览(59)
  • 【算法与数据结构】Java实现查找与排序

    也叫做折半查找,属于有序查找算法。 前提条件 :数组数据必须有序,从小到大,或者从大到小都是可以的。 如果是无序的,也可以先进行排序。 但是排序之后,会改变原有数据的顺序,查找出来元素位置跟原来的元素可能是不一样的,所以排序之后再查找只能判断当前数

    2024年01月19日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包