数据结构-静态查找、二分查找、分块查找

news2024/11/17 10:32:50

静态查找

在静态查找表中,我们只允许下面两件事:

1.在查找表中查找某个记录是否在表中

2.查找表中记录的各个属性

动态查找

在动态查找表中,我们允许四件事:

1.在查找表中查找某个记录是否在表中

2.查找表中记录的各个属性

3.将一个表中不存在的记录插入到表中

4.删除表中一个记录

顺序查找

顺序查找是一个最简单的查找方法,具体实现方法没有什么好说的,一个循环暴力解决。

时间复杂度:O(n)

折半查找(二分查找)

二分查找只适用于一个有序的表(升序/降序)。

时间复杂度:O(log_{2} n

对于二分查找,我们这样定义:

首先我们有三个指针:low、mid、high。

其中low指向查找区域的下界,mid指向查找区域的中间位置,high指向查找区域的上界。

其次,我们假设我们查找的值为key,表中的值为num

1.首先确定初始查找的范围:

low = 1,high = n

2.令mid = 【(low + high) / 2】->(取整)

3.比较:

(1)若key = num,则代表查找成功

(2)若key>num,说明key值在num的右边区域,也就是整个查找表中mid的右边区域。

此时需要修改下界值,令low = mid + 1

(3)若key<num,说明key值在num的左边区域,也就是整个查找表中mid的左边区域。

此时需要修改上界值,令high = mid - 1

4.重复步骤2和3,直到key=num查找成功,或者low>high代表表中没有这个key值,查找失败。

举个例子:

例如,我们有下面这一个有序表:

(5,12,19,23,34,56,62,75,80,87,98)

我们想要查找key = 23在表中的位置。

二分查找步骤为:

1.初始化指针:

low = 1,high = 11,mid = 6

2.随后进行比较:

最后返回位置4。

代码实现:

#include<stdio.h>
#define MAX_NUM 100
typedef int KeyType;
typedef struct{
	KeyType key;
}ElemType;
typedef struct{
	ElemType elem[MAX_NUM];
	int length;
}SSTable;

void CreateSSTable(SSTable *st,KeyType *Sample_Data)
{
	int i;
	st->length = 11;
	for(i=0;i<st->length;i++){
		st->elem[i].key = Sample_Data[i];
	}
	printf("顺序表建立成功.\n");
}

int Binary_Search(SSTable *st,KeyType n)
{
	int i;
	int low = 0,high = st->length - 1,mid;
	while(low<=high){
		mid = (low + high) / 2;
		if(st->elem[mid].key == n)
			return mid;
		else if(n < st->elem[mid].key)
			high = mid - 1;
		else
			low = mid + 1; 
	}
	return -1;
}

int main()
{
	KeyType Sample_Data[11]={5,12,19,23,34,56,62,75,80,87,98};
	SSTable st;
	CreateSSTable(&st,Sample_Data);
	int res = Binary_Search(&st,23);
	if(res != -1){
		printf("23的位置在表中的下标索引值为:{%d}\n",res);
	}
	else{
		printf("错误,表中不存在该值.\n");
	}
	return 0;
}

验证:

值得注意的是,上图的代码编写中,为了方便起见,我让起始位置下界为0,上界为表长度减一。

分块查找:

分块查找也叫索引顺序查找,是顺序查找的一种改进。

存储结构仍是基本顺序表,但是需要另外建立一个新的索引表。

该索引表,指示表中各个位置,例如将基本表分成三张小表,则索引表指示这三个小表。

并且小表与小表之间是有顺序的,但是小表内的数据可以是无序的。

例如,第一张小表内的所有数据都小于第二张小表内的所有数据,第二张小表内的所有数据都小于

第三张小表的所有数据。

时间复杂度:介于二分查找和顺序查找之间。

如下图所示:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1201759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代理模式-静态动态代理-jdk动态代理-cglib动态代理

代理模式 静态代理 动态代理&#xff1a;jdk动态代理 cglib动态代理 注意 &#xff1a;下面的代码截图 要配合文字去看 我对代码的每一步都做了解释 所以需要配合图片观看提取吗1111https://pan.baidu.com/s/1OxQSwbQ--t5Zvmwzjh1T0A?pwd1111 这里直接把项目文件 及代码 …

Linux 使用随记

Linux 使用随记 shell 命令行模式登录后所取得的程序被成为shell&#xff0c;这是因为这个程序负责最外层的跟用户&#xff08;我们&#xff09;通信工作&#xff0c;所以才被戏称为shell。 命令 1、命令格式 command [-options] parameter1 parameter2 … 1、一行命令中第…

FNPLicensingService.exe 总提示要联网

目录预览 一、问题描述二、原因分析三、解决方案&#xff1a;四、参考链接 一、问题描述 FNPLicensingService.exe 总提示要联网 找到路径如下&#xff1a; C:\Program Files (x86)\Common Files\Macrovision Shared\FlexNet Publisher然而从文件目录来看&#xff0c;并没有…

成都优优聚美团代运营:打造高效电商运营的利器

一、引人注目的标题 在繁杂的电商市场中&#xff0c;成都优优聚美团代运营以其专业的服务&#xff0c;为商家提供了一站式的解决方案。那么&#xff0c;这个备受瞩目的代运营平台有何特别之处呢&#xff1f;今天&#xff0c;我们就来一探究竟。 二、平台背景与优势 成都优优聚…

Electronica Samtec展台连接器Demo回顾 | 224Gbps PAM4:令人瞠目的速率

【摘要/前言】 最近&#xff0c;我们正在为大家带来2023慕尼黑上海电子展虎家展台Demo演示回顾系列。 今天虎家工程师团队再次为大家带来系列第一期&#xff1a; 我们邀请到了合作伙伴Keysight&#xff0c;与我们一同带来了Samtec NovaRay高密度、高性能阵列连接器以及Keysig…

微信小程序用户隐私API

用户隐私保护 由于用户隐私保护的政策执行&#xff0c;我们在调用涉及到用户隐私的API时&#xff0c;未更新用户隐私保护协议是无法直接调用的&#xff0c;小程序会默认判断是否更新用户隐私保护 &#xff0c;并根据用户隐私保护中的协议来判断是否可以调用对应的API&#xff…

Generated Key 的功能

Generated Key 简介 一. 前言现场报错原因解决扩展 二. Generated Key简介&#xff1a;作用使用 一. 前言 现场报错 在客户现场遇到如下报错&#xff0c;现象是无法使用调度系统进行数据库的 insert 操作&#xff1a; 原因 数据库版本太老&#xff0c;而 insert 语句是使…

高性能图表库LightningChart JS v5.0 - 轻松实现图表自定义布局

LightningChart JS是Web上性能最高的图表库具有出色的执行性能 - 使用高数据速率同时监控数十个数据源。 GPU加速和WebGL渲染确保您的设备的图形处理器得到有效利用&#xff0c;从而实现高刷新率和流畅的动画。 点击获取LightningChart JS v5.0正式版下载 LightningChart JS …

如何压缩文件?学会这4个简单方法!

“我有一些文件需要发送&#xff0c;但是文件太大了无法发送&#xff0c;我想把它们压缩但是不知道怎么操作。怎么压缩文件呢&#xff1f;谁能帮我出出主意呀&#xff1f;” 在数字化时代&#xff0c;文件传输和存储变得日益重要。压缩文件是一种有效的方式&#xff0c;可以减小…

清单式管理提高巡检质量——巡检管理系统体系化管理

巡检管理系统采用体系化的清单式管理方法&#xff0c;减少巡检工作中人为因素的误差&#xff0c;让巡检工作落实到细节&#xff0c;并有迹可查。 清单式管理是一种高效、系统化的巡检方法&#xff0c;广泛应用于各种行业和领域。通过制定详细的巡检清单&#xff0c;明确巡检内容…

MATLAB Simulink和SMART PLC水箱液位高度PID控制联合仿真

SMART PLC 向导PID的详细介绍请查看下面文章链接: S7-200 SMART PLC PID向导详细介绍(如何实现P、PD、PID控制器)-CSDN博客文章浏览阅读1k次。这篇博客主要介绍SMART PLC PID向导的使用,PID控制相关的其它内容请查看专栏系列文章,常用链接如下:SMART PLC PID负压控制(过程…

简洁高效的微信小程序分页器封装实践

前言 在现今的移动应用开发中&#xff0c;微信小程序已经成为了一个备受欢迎的平台。然而&#xff0c;随着应用的复杂性增加&#xff0c;数据的管理和加载成为了一个问题。本文将探讨微信小程序中的一个关键概念&#xff1a;封装分页器&#xff0c;它是提升小程序性能和用户体验…

windows qos api使用示例

简介 本文给出C版以及Rust版调用windows API实现QOS的示例&#xff0c;并提出一些注意事项。QOS可以用来区分socket 优先级、实现带宽控制等诸多功能。 UDP版本 该示例的重要部分是客户端应用程序。客户端代码的工作方式如下&#xff1a; 1. 通过套接字连接到目标 IP 地址。…

手把手教你数据流图如何画,轻松搞定!

数据流图是一种强大的工具&#xff0c;用于可视化和分析系统中的数据流动和处理过程。它不仅能够帮助我们更好地理解系统的功能和流程&#xff0c;还能够帮助我们发现和解决潜在的问题。在本篇文章中&#xff0c;我们将手把手教你掌握数据流图。 一、数据流图的概念和构成元素 …

合合信息亮相新加坡科技周——Big Data AI World Expo展示AI驱动文档数字化的前沿能力

展会规模背景&#xff1a; 2023年10月11日-12日&#xff0c;合合信息在TECH WEEK SINGAPORE&#xff08;新加坡科技周&#xff09;亮相&#xff0c;并在人工智能世界博览会&#xff08;Big Data & AI World&#xff09;展示合合信息核心人工智能文字识别技术能力。合合信息…

cadence virtuoso 导出电路图

去掉网格&#xff1a;option-display file-export image

FPGA高端项目:图像采集+GTX+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

目录 1、前言免责声明本项目特点 2、相关方案推荐我这里已有的 GT 高速接口解决方案我这里已有的以太网方案 3、设计思路框架设计框图视频源选择OV5640摄像头配置及采集动态彩条视频数据组包GTX 全网最细解读GTX 基本结构GTX 发送和接收处理流程GTX 的参考时钟GTX 发送接口GTX …

如何在电脑和手机设备上编辑只读 PDF

我们大多数人更喜欢以 PDF 格式共享和查看文件&#xff0c;因为它更专业、更便携。但是&#xff0c;通常情况下您被拒绝访问除查看之外的内容编辑、复制或评论。如果您希望更好地控制您的 PDF 或更灵活地编辑它&#xff0c;请弄清楚为什么您的 PDF 是只读的&#xff0c;然后使用…

Final Cut Pro X for Mac:打造专业级视频剪辑的终极利器

随着数字媒体技术的不断发展&#xff0c;视频剪辑已经成为各行各业不可或缺的一部分。Final Cut Pro X for Mac作为一款专业的视频剪辑软件&#xff0c;凭借其强大的功能和易用性&#xff0c;已经成为Mac用户的首选。本文将向您详细介绍Final Cut Pro X for Mac的优势、功能以及…

思维导图软件 Xmind mac中文版软件特点

XMind mac是一款思维导图软件&#xff0c;可以帮助用户创建各种类型的思维导图和概念图。 XMind mac软件特点 - 多样化的导图类型&#xff1a;XMind提供了多种类型的导图&#xff0c;如鱼骨图、树形图、机构图等&#xff0c;可以满足不同用户的需求。 - 强大的功能和工具&#…