顺序查找和折半查找

顺序查找的算法思想

顺序查找,又叫“线性查找”,通常用于线性表
算法思想:从头到脚挨个找
顺序查找的实现

typedef struct{		//查找表的数据结构(顺序表)
	ElemType *elem;	//动态数组基址
    int TableLen;	//表的长度
}SSTable;
//顺序查找
int Search_Seq(SSTable ST,ElemType key){
	int i;
    for(i=0;i<ST.TableLen&&ST.elem[i]!=key;++i);
	//查找成功,则返回元素下标;查找失败,则返回-1
    return i=ST.TableLen?-1:i;
}

顺序查找的实现(哨兵)

typedef struct{		//查找表的数据结构(顺序表)
	ElemType *elem;	//动态数组基址
    int TableLen;	//表的长度
}SSTable;
//顺序查找
int Search_Seq(SSTable ST,ElemType key){
    ST.elem[0]=key;		//哨兵
	int i;
    for(i=ST.TableLen;ST.elem[i]!=key;--i);//从后往前找
    return i;//查找成功,则返回元素下标;查找失败,则返回0
}

优点:无需判断是否越界,效率更高
image.png
顺序查找的优化(对有序表)
image.pngimage.png
用查找判定树分析ASL
image.png
一个成功结点的查找长度=自身所在层数
一个失败结点的查找长度=其父节点所在层数
默认情况下,各种失败情况或成功情况都等概率发生

折半查找

折半查找的算法思想

折半查找,又称“二分查找”,仅适用于有序的顺序表
image.png
33>mid,只可能在右边区域
image.png
33<mid,只可能在左边区域
image.png
33>mid,只可能在右边区域
image.png
33==mid 查找成功
image.png
12<mid,只可能在左边区域
image.png
12<mid,只可能在左边区域
image.png
image.png
image.png
low>high查找失败

typedef struct{		//查找表的数据结构(顺序表)
    ElemType *elem;	//动态数组基址
    int TableLen;	//表的长度
}SSTable;
//折半查找
int Binary_Search(SSTable L,ElemType key){
	int low=0;high=L.TableLen-1;mid;
    while(low<=high){
        mid=(low+high)/2;		//取中间位置
        if(L.elem[mid]==key)
            return mid;			//查找成功则返回所在位置
        else if(L.elem[mid]>key)
            high=mid-1;			//从前半部分继续查找
        else
            low=mid+1;			//从后半部分继续查找
    }
    return -1;					//查找失败,返回-1
}

查找效率分析

image.png
ASL成功=(11+23+34+44)/11=3
ASL失败=(34+48)/12=11/3

折半查找判定树的构造

image.pngimage.png
折半查找的判定树一定是平衡二叉树
判定树结点关键字:左<中<右,满足二叉树排序树的定义
折半查找的查找效率
image.png

分块查找

分块查找的算法思想
image.png
特点:块内无序、块间有序

//索引表
typedef struct{
	ElemType maxValue;
    int low,high;
}Index;
//顺序表存储实际元素
ElemType List[100];

image.png
image.png
image.png
image.png
image.png
超出分块范围,查找失败
分块查找,又称索引顺序查找,算法过程如下:
1-在索引表中确定待查记录所属的分块(可顺序、可折半)
2-在块内顺序查找
用折半查找索引
image.png
image.png
image.png
若索引表中不包含目标关键字,则折半查找索引表最终停在low>high,要在low所指分块中查找
原因:最终low左边一定小于目标关键字,high右边一定大于目标关键字。而分块存储的索引表中保存的是各分块的最大关键字
image.png
image.png
若索引表中不包含目标关键字,则折半查找索引表最终停在low>high,要在low所指分块中查找
查找效率分析(ASL)
image.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

华为ensp:rip宣告

ip全部配置好 R1 进入r1视图模式 rip network 192.168.1.0 network 1.0.0.0 R2 进入r2视图模式 rip network 192.168.2.0 network 1.0.0.0 这样就完成了宣告 display ip routing-table 查看路由表

Leetcode—191.位1的个数【简单】

2023每日刷题&#xff08;二十七&#xff09; Leetcode—191.位1的个数 实现代码 int hammingWeight(uint32_t n) {int ans 0;for(int i 0; i < 32; i) {if(n & ((long long)1 << i)) {ans;}}return ans; }运行结果 翻转比特1思路 就解法一的代码实现来说&am…

零基础学习Matlab,适合入门级新手,了解Matlab

一、认识Matlab Matlab安装请参见博客 安装步骤 1.界面 2.清空环境变量及命令 &#xff08;1&#xff09;clear all &#xff1a;清除Workspace中的所有变量 &#xff08;2&#xff09;clc&#xff1a;清除Command Window中的所有命令 二、Matlab基础 1.变量命名规则 &a…

Django的ORM操作

文章目录 1.ORM操作1.1 表结构1.1.1 常见字段和参数1.1.2 表关系 2.ORM2.1 基本操作2.2 连接数据库2.3 基础增删改查2.3.1 增加2.3.2 查找2.3.4 删除2.3.4 修改 1.ORM操作 orm&#xff0c;关系对象映射&#xff0c;本质翻译的。 1.1 表结构 实现&#xff1a;创建表、修改表、…

深度学习之基于Pytorch框架的MNIST手写数字识别

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 MNIST是一个手写数字识别的数据集&#xff0c;是深度学习中最常用的数据集之一。基于Pytorch框架的MNIST手写数字识…

k8s-实验部署 1

1、k8s集群部署 更改所有主机名称和解析 开启四台实验主机&#xff0c;k8s1 仓库&#xff1b;k8s2 集群控制节点&#xff1b; k8s3 和k8s4集群工作节点&#xff1b; 集群环境初始化 使用k8s1作为仓库&#xff0c;将所有的镜像都保存在本地&#xff0c;不要将集群从外部走 仓库…

Mac Qt 5.13.2无法加载文件

在Mac OS 14.0系统上&#xff0c;离线安装了Qt5.13.2&#xff0c;但是新建一个工程&#xff0c;却无法正常使用&#xff0c;只能加载出pro文件&#xff0c;其他文件都加载不出来&#xff0c;提示错误&#xff1a;Project ERROR: failed to parse default search paths from com…

uniapp——项目day03

商品列表 分支创建 定义请求参数对象 获取商品列表数据 渲染商品列表结构 1. 在页面中&#xff0c;通过 v-for 指令&#xff0c;循环渲染出商品的 UI 结构&#xff1a; <template><view><view class"goods-list"><block v-for"(goods,…

【Proteus仿真】【51单片机】多路温度控制系统

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真51单片机控制器&#xff0c;使用按键、LED、蜂鸣器、LCD1602、DS18B20温度传感器、HC05蓝牙模块等。 主要功能&#xff1a; 系统运行后&#xff0c;默认LCD1602显示前4路采集的温…

计算机msvcp140.dll重新安装的四个解决方法,专门解决dll文件丢失问题的方法

在我多年的电脑使用经历中&#xff0c;曾经遇到过一个非常棘手的问题&#xff0c;那就是电脑提示找不到msvcp140.dll文件。这个问题让我苦恼了很久&#xff0c;但最终还是找到了解决方法。今天&#xff0c;我就来分享一下我解决这个问题的四种方法&#xff0c;希望对大家有所帮…

Verilog 之 wire与reg 类型的变量

文章目录 reg 类型wire 类型总结默认情况下的input ,output 变量 在 Verilog 中&#xff0c;reg 和 wire 是用来声明变量或信号的关键字&#xff0c;它们有不同的特征和用途。 reg 类型 reg 类型用于表示寄存器变量。在 Verilog 中&#xff0c;reg 用于存储状态或时序逻辑&am…

dos命令bat结合任务计划程序自动执行py文件

效果 bat文件 run.bat @echo off call C:\ProgramData\Anaconda3\Scripts\activate.bat pytorch C:\ProgramData\Anaconda3\envs\pytorch\python.exe E:\Gerapy_py\gerapy\projects\xmtv\xmtv\start_urls.py下面这个bat文件可以用来判断py文件是否执行成功 @echo off call C…

代码随想录算法训练营|动态规划三十八天~四十三天

动态规划五部曲&#xff1a; 1、确定dp数组以及下标的含义 2、确定递推公式 3、dp数组如何初始化 4、确定遍历顺序 5、举例推导dp数组 三十八天 斐波那契数 509. 斐波那契数 - 力扣&#xff08;LeetCode&#xff09; public class Solution {public int MonotoneIncre…

基于Java+SpringBoot+Vue3+TypeScript前后端分离商城后台管理系统设计与实现

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

Technology Strategy Patterns 学习笔记6-Communicating the Strategy-Approach Patterns

1 30-Second Answer 1.1 类似麦肯锡电梯谈话 Map an outline of three bullet points in your head, and then give the executives the simple, declarative, definitive answerAdd your three reasons or characterizations with your three bullet points also as high-le…

详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

最近发现一本好书&#xff0c;读完感觉讲的非常好&#xff0c;首先安利给大家&#xff0c;国内第一本系统讲解数据血缘的书&#xff01;点赞&#xff01;近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容&#xff0c;包…

文件基础IO

1.先回忆一下c语言的文件接口&#xff1a; fopen,fwrite: 对应的代码如下&#xff1a; 注意fopen和fwrite的用法&#xff1a; 代码结果&#xff1a; 对应的strlen不需要1吗&#xff0c;不需要\0对应的是c语言的存储方式&#xff0c;和操作系统无关。 可以看到已经在对应的文…

使用3D Touch,让你左右逢源,操作更自然

本文介绍了如何在苹果设备上使用3D Touch&#xff0c;以及哪些应用程序支持该工具。3D Touch在Apple Watch上也称为Force Touch&#xff0c;在iPhone XR上也称为Haptic Touch。 如何改变3D触摸的灵敏度 按照以下步骤调整3D Touch的灵敏度&#xff1a; 1、打开“设置”应用程…

HTML5+CSS3+Vue小实例:输入框打字放大特效

实例:输入框打字放大特效 技术栈:HTML+CSSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" content=&…

使用Nodejs搭建简单的Web网页并实现公网访问

目录 前言 1. 安装Node.js环境 2. 创建Node.js应用 3. 安装Cpolar内网穿透实现公网访问Nodejs服务 3.1 注册cpolar账号 3.2 下载cpolar客户端 3.3 创建隧道映射本地端口 4. 固定公网远程地址 前言 Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web应用程序框架…