数据结构,查找算法(二分,分块,哈希)

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

一、查找算法

        1、二分查找:(前提条件: 必须有序的序列)

#include <stdio.h>
//二分查找 value代表的是被查找的值
int findByHalf(int *p, int n, int value)
{
	int low = 0;//low低
	int high = n-1;//high高
	int middle;//用来保存中间位置的下标
	while(low <= high)//注意此处循环结束的条件,需要加上 =
	{
		//不断获取中间位置的下标
		middle = (low + high) / 2;
		if(value < p[middle])//说明在前半段,移动high
		{
			high = middle-1;
		}
		else if(value > p[middle])//说明在后半段,移动low
		{
			low = middle + 1;
		}
		else//对应p[middle] == value 情况
		{
			return middle;
		}
	}
	return -1;//代表没有找到
}


int main(int argc, const char *argv[])
{
	int a[] = {12,34,56,77,89,342,567,7898};
	int i;
	for(i = 0; i < sizeof(a)/sizeof(a[0]); i++)//把数组中的每个元素都找一遍,进行测试程序
	{
		printf("%d post is %d\n",a[i],findByHalf(a,sizeof(a)/sizeof(a[0]),a[i]));
	}
	//查找10000返回 -1
	printf("%d post is %d\n",10000,findByHalf(a,sizeof(a)/sizeof(a[0]),10000));
	return 0;
}

2、分块查找:(块间有序,块内无序)

    索引表  +  源数据表

    思路:

    (1)先在索引表中确定在哪一块中

    (2)再遍历这一块进行查找

//索引表
typedef  struct 
{
    int max; //块中最大值
    int post;//块的起始位置下标,post数组下标
}index_t; //索引
    
//源数据表
int a[19] = {18, 10, 9, 8, 16, 20, 38, 42, 19, 50, 84, 72, 56, 55, 76, 100, 90, 88, 108};
                             0                 5                   10                  15
//索引表
index_t b[4] = { {18,0},{50,5},{84,10},{108,15}};文章来源地址https://www.toymoban.com/news/detail-666436.html

                    

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

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

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

相关文章

  • Python数据结构与算法篇(五)-- 二分查找与二分答案

    1.1 定义         二分查找又称折半查找、二分搜索、折半搜索等,是一种在静态查找表中查找特定元素的算法。         所谓静态查找表,即只能对表内的元素做查找和读取操作,不允许插入或删除元素。         使用二分查找算法,必须保证查找表中存放的是有

    2023年04月20日
    浏览(47)
  • 数据结构之索引查找(分块查找)

    活动地址:CSDN21天学习挑战赛   作者简介:大家好我是小唐同学(๑؂๑),为梦想而奋斗的小唐,让我们一起加油!!! 个人主页: 小唐同学(๑؂๑)的博客主页 系列专栏:数据结构 博友们如果也是新手入门数据结构我希望大家可以多加练习 数据结构题库在牛客网就有已

    2024年02月02日
    浏览(53)
  • 17-数据结构-查找-(顺序、折半、分块)

            简介:查找,顾名思义,是我们处理数据时常用的操作之一。大概就是我们从表格中去搜索我们想要的东西,这个表格,就是所谓的查找表(存储数据的表)。而我们怎么设计查找,才可以让计算机更快的去找到筛选我们所需要的信息呢,因此,关于怎么设计查找

    2024年02月09日
    浏览(58)
  • C++数据结构之查找——静态查找表(顺序查找、折半查找、分块查找 带有gif以及图示)

    目录 一、查找的相关概念介绍 1.查找表(Search Table) 概念 对查找表的操作 查找表的分类 2.(Key) 概念 3.查找(Searching) 概念 4.衡量查找算法的标准 1.时间复杂度 2.空间复杂度 3.平均查找长度(ASL) 二、静态查找表 1.顺序查找 算法思路 算法举例 算法性能分析 不等概率

    2024年02月03日
    浏览(44)
  • 数据结构和算法——哈希查找冲突处理方法(开放地址法-线性探测、平方探测、双散列探测、再散列,分离链接法)

    目录 开放地址法(Open Addressing) 线性探测(Linear Probing) 散列表查找性能分析 平方探测(Quadratic Probing)  定理 平方探测法的查找与插入 双散列探测法(Double Hashing)  再散列(Rehashing) 分离链接法(Separate Chaining) 平均查找次数 分离链接法的散列表实现 常用处理冲突的

    2024年02月08日
    浏览(66)
  • Java【数据结构】二分查找

    🌏在 有序 数组A中,查找目标值target 🌏如果找到返回索引 🌏如果找不到返回-1 算法描述 解释 前提 给定一个内含n个元素的有序数组A,满足A0=A1=A2=·······=An-1,一个待查值target 1 设置left=0;right = n - 1 2 如果left right ,结束查找,没找到 3 设置mid = (left + right )/2,mid为中间

    2024年02月12日
    浏览(49)
  • 数据结构-查找(顺序查找与二分查找的讲解与代码实现)

    顺序查找概念:从表的另一端开始,一次将记录的和给定值进行比较,若某个记录的和给定的值相等,则查找成功,反之则查找失败。 ASL:平均查找长度 pi查找概率,ci查找次数 eg:序列1,2,3 查找1的次数为1概率为1/3,2为两次概率1/3,3的次数为3概率1/3  将12

    2024年02月06日
    浏览(69)
  • 【手撕数据结构】二分查找(好多细节)

    🌈键盘敲烂,年薪30万🌈 目录 普通版本的二分查找: right只负责控制边界(少了两次比较): 时间复杂度更稳定的版本: BSLeftmost: BSRightmost:   🏸细节1:循环判定条件是left = right ⭐细节2:mid = (left + right ) 1 原因见代码注释 改动1:while条件是left right 改动2:right = nums.len

    2024年02月05日
    浏览(47)
  • 【数据结构】哈希表查找失败时的平均查找长度

    0. 题目 设有一组 {19, 1, 23, 14, 55, 20, 84, 27, 68, 11, 10, 77} 哈希函数为: H(key) = key % 13 采用开放地址法的线性探测法处理冲突 试0~18的哈希表中对该序列构造哈希表,并求成功和不成功时的平均查找长度 1. 解答 ASL成功 = (1 + 2 +1 + 4 + 3 + 1 + 1 + 3 + 1 + 1 + 3 + 2) / 12 = 1.92

    2024年02月11日
    浏览(45)
  • 【Python查找算法】二分查找、线性查找、哈希查找

    目录 1 二分查找算法  2 线性查找算法 3 哈希查找算法         二分查找(Binary Search)是一种用于在有序数据集合中查找特定元素的高效算法。它的工作原理基于将数据集合分成两半,然后逐步缩小搜索范围,直到找到目标元素或确定目标元素不存在。 以下是二分查找的

    2024年02月08日
    浏览(51)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包