学习记录day19——数据结构 查找算法

概念

        在给定数据元素的某个值,在查找表中确定一个其关键字等于给定值的数据元素的操作,叫做查找

查找的分类

        顺序查找:将待查找数据,进行全部遍历一遍,直到找到要查找的元素

        折半查找:每次都去除一半的查找范围的查找方式,叫做折半查找

        哈希查找:利用哈希表和哈希函数完成的查找方式(效率最高)

折半查找

        使用前提:

                1、在顺序表中进行查找

                2、数据必须是有序的

        原理:

                1、在顺序存储的有序列表中,通过逐次减半查找范围,最终确定要查找的值的算法

         算法:

int half_search(int *arr,int n,int key)
{int low = 0;int high = n-1;int mid = -1;while(low<=high){mid = (low+high)/2;if (arr[mid] == key){return mid;}else if (arr[mid]>key){high = mid-1;}else{low = mid +1;}}return -1;
}

哈希查找

1、相关概念

        1)哈希表是借助哈希函数将序列存储于连续存储空间的查找表

       

         2)哈希函数是根据关键字确定存储位置的函数

        3)哈希冲突是不同关键字由哈希函数得到相同存储位置的现象

 2、构造哈希函数的方法:


                直接定址法、数字分析法、平方取中法、折叠法、除留余数法、随机数法

        5)除留余数法:取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址的                                     方法

              序列长度n:待查找数据的个数

              哈希表表长m:一般为大于n的值,n/(3/4)

              要被除的值p:小于或等于表长的最大素数

3、常用的处理冲突的方法

4、代码实现

00.h

#ifndef DAY19_HASH_H
#define DAY19_HASH_H#include <myhead.h>
#define N 13 //哈希表长度 //定义数据类型
typedef int datatype;
typedef struct Node
{datatype data;struct Node *next;
}Node,*NodePtr;void init_hash(NodePtr *hash);void insert_hash(NodePtr *hash,datatype e);void show_hash(NodePtr *hash);int search_hash(NodePtr *hash,datatype key);
#endif // !DAY19_HASH_H

00.c

#include "00.h"void init_hash(NodePtr *hash)
{for (int i = 0; i < N; i++){hash[i] = NULL;}printf("初始化成功\n");
}void insert_hash(NodePtr *hash,datatype e)
{int pos = e%N;NodePtr p = (NodePtr)malloc(sizeof(Node));if (NULL ==p){return ;}p->data = e;p->next = NULL;p->next = hash[pos];hash[pos] = p;printf("插入成功\n");
}void show_hash(NodePtr *hash)
{for (int i = 0; i < N; i++){printf("%d:",i);NodePtr q = hash[i];while(q != NULL){printf("%d-->",q->data);q = q->next;}printf("NULL\n");}}int search_hash(NodePtr *hash,datatype key)
{int pos = key%N;NodePtr q = hash[pos];while (q && q->data != key){q = q->next;}if (NULL == q){return -1;}else{return 0;}}

main.c

#include "00.h"
int main(int argc, char const *argv[])
{int arr[10] = {25,51,8,22,26,67,11,16,54,41};//定义一个哈希表NodePtr hash[N];  //指针数组//初始化哈希表init_hash(hash);for (int i = 0; i < 10; i++){insert_hash(hash,arr[i]);}show_hash(hash);int res = search_hash(hash,22);if (res == -1){printf("不存在r\n");}else{printf("存在\n");}int res1 = search_hash(hash,500);if (res1 == -1){printf("不存在\n");}else{printf("存在\n");}return 0;
}

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

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

相关文章

vue3响应式用法(高阶性能优化)

文章目录 前言&#xff1a;一、 shallowRef()二、 triggerRef()三、 customRef()四、 shallowReactive()五、 toRaw()六、 markRaw()七、 shallowReadonly()小结&#xff1a; 前言&#xff1a; 翻别人代码时&#xff0c;总结发现极大部分使用vue3的人只会用ref和reactive处理响…

mysql-bin 恢复数据库

能看到这里的同学估计肯定摊上大事了吧&#xff01;不要慌&#xff0c;一定要冷静&#xff0c;记录一下作者的大事件吧&#xff0c;黑客通过SQL注入的方式执行了一段SQL &#xff1a; DROP DATABASE ****** 后果就是导致整个数据库被删了&#xff0c;当时心是拔凉拔凉的&#x…

在jmeter中使用javascript脚本

工作上遇到一个压力测试的需求&#xff0c;需要测试几个考试相关的接口。其中有一个获取试题详情的接口&#xff0c;和一个提交答题信息的接口。后一个接口以上一接口的返回内容为参数&#xff0c;添加上用户的答案即可。jmeter提供了非常多的方式可以实现该需求&#xff0c;这…

【深度学习】大模型GLM-4-9B Chat ,微调与部署(3) TensorRT-LLM、TensorRT量化加速、Triton部署

文章目录 获取TensorRT-LLM代码&#xff1a;构建docker镜像并安装TensorRT-LLM&#xff1a;运行docker镜像&#xff1a;安装依赖魔改下部分package代码&#xff1a;量化&#xff1a;构建图&#xff1a;全局参数插件配置常用配置参数 测试推理是否可以代码推理CLI推理 性能测试小…

钡铼网关实时数据互联,加速IEC104与MQTT云平台对接

随着工业4.0时代的到来&#xff0c;电力系统中的数据采集、监控与远程控制需求日益增长。IEC 104&#xff08;IEC 60870-5-104&#xff09;作为国际电工委员会&#xff08;IEC&#xff09;制定的电力自动化通信协议&#xff0c;广泛应用于电力系统的状态监测、数据采集和设备控…

Vue实现简单小案例

一、创建文件夹 二、引用vue.js <script src"../js/vue.js"></script> 三、准备一个容器 <div id"app"><h1>Hello,{{name}}</h1> </div> 四、创建实例 <script>new Vue({el:"#app", //el用于指…

【STM32 FreeRTOS】FreeRTOS的移植

其实这篇文章不侧重移植&#xff0c;因为我们会使用CubeMX配置&#xff0c;那样会自动移植FreeRTOS。 关于FreeRTOS&#xff0c;可以参考官网&#xff1a;FreeRTOS - Quick start guide 当我们在CubeMX中配置了CMSIS_V2后尝试编译的时候会有一个弹窗。 第一个问题就是强烈建议…

【深度学习】yolov8-det目标检测训练,拼接图的分割复原

项目背景 https://blog.csdn.net/x1131230123/article/details/140606459 似乎这个任务是简单的&#xff0c;利用目标检测是否可以完成得好呢? 生成数据集 利用这个代码产生数据集&#xff1a; 为了将标签转换为YOLOv5格式&#xff0c;需要将左上角和右下角的坐标转换为Y…

【性能测试-登录时密码加密存储如何传参】

目的】 登录接口&#xff0c;密码加密传输&#xff0c;开发不做处理的情况下&#xff0c;密码如何加密传输 【方案】 使用前置处理器&#xff1a;JSR223 预处理程序&#xff0c;主要是在执行登录接口前将密码按照加密算法获得对应的加密密码&#xff0c;并传入接口 【说明】前…

如何对视频文件加密_如何加密视频文件_视频文件如何加密

“嘿&#xff0c;小李&#xff0c;你知道咱们公司的新项目资料都是视频形式的吗&#xff1f;这些视频里有很多机密信息&#xff0c;我们需要好好保护起来。” “是啊&#xff0c;我也在想这个问题。你有没有什么好办法来加密这些视频文件呢&#xff1f;” “我听说有个叫域智盾…

生成式AI的双重路径:Chat与Agent的融合与竞争

文章目录 每日一句正能量前言整体介绍对话系统&#xff08;Chat&#xff09;自主代理&#xff08;Agent&#xff09;结论 技术对比技术差异优势与劣势技术挑战结论 未来展望发展趋势Chat与Agent的前景社会和经济影响结论 后记 每日一句正能量 在避风的港湾里&#xff0c;找不到…

代码随想录算法训练营第38天|LeetCode 322. 零钱兑换、279.完全平方数、139.单词拆分

1. LeetCode 322. 零钱兑换 题目链接&#xff1a;https://leetcode.cn/problems/coin-change/description/ 文章链接&#xff1a;https://programmercarl.com/0322.零钱兑换.html 视频链接&#xff1a;https://www.bilibili.com/video/BV14K411R7yv/ 思路&#xff1a; 硬币无限…

实现领域驱动设计(DDD)系列详解:领域模型的持久化

领域驱动设计主要通过限界上下文应对复杂度&#xff0c;它是绑定业务架构、应用架构和数据架构的关键架构单元。设计由领域而非数据驱动&#xff0c;且为了保证定义了领域模型的应用架构和定义了数据模型的数据架构的变化方向相同&#xff0c;就应该在领域建模阶段率先定义领域…

我的世界!

每位冒险家在《我的世界》中的出生点都各不相同&#xff0c; 有的出生在桦木森林&#xff0c;有的出生在草原&#xff0c; 还有的出生在临近海洋的沙滩。 这些环境叫做生物群系&#xff0c;也常被称为生态系统。 在《我的世界》中的不同生物群系具有不同的地域特色—— 不…

本地化部署一个简单的AI大模型,Llama3.1

7 月 23 日消息&#xff0c;Meta 今晚正式发布llama3.1&#xff0c;提供 8B、70B 及 405B 参数版本。 Meta 称 4050 亿参数的 Llama 3.1-405B 在常识、可引导性、数学、工具使用和多语言翻译等一系列任务中&#xff0c;可与 GPT-4、GPT-4o、Claude 3.5 Sonnet 等领先的闭源模型…

Qt遇到qt自身组件找不到

比如在使用qtcharts的时候&#xff0c;找不到 解决方法&#xff1a; 在cmakelist中添加 find_package(Qt${QT_VERSION_MAJOR} COMPONENTS Charts REQUIRED) 是一个 CMake 命令&#xff0c;用于查找并配置 Qt 库中的特定组件。这条命令的作用是找到 Qt 的主要版本&#xff08;…

ST Stellar-E SR5E1 22KW OBC combo 3KW DC-DC汽车充电器解决方案

对于全球的环境保护意识抬头&#xff0c;全球的汽车产业慢慢步入电动化的时代&#xff0c;以减少碳排放。整车系统主要是由电池、电驱、电控的三电所构成&#xff0c;其中电池系统是整车的动力来源&#xff0c;而对电池充电的OBC系统更甚重要。一具高度安全性且高效的OBC系统&a…

MybatisPlus设置动态表名

对于一些数据量比较大的表&#xff0c;为了提高查询性能&#xff0c;我们一般将表拆分成多张表&#xff0c;常见的是根据数据量&#xff0c;按年分表或者按月分表&#xff1b;分表虽然太高了查询性能&#xff0c;但是在查询的时候&#xff0c;如何才能查询执行分表数据呢&#…

7.25扣...

思路&#xff1a;别的语言都可以不用辅助数组&#xff0c;我Java就得用&#xff01; c:先计算字符串中数字个数&#xff0c;然后利用双指针将原本字符串逆序从数组最后往前插入&#xff0c;若遇到数字则替换为逆序的“number”&#xff0c;这个过程会使新字符串从后往前覆盖&am…

UI界面卡顿检测工具--UIHaltDetector

引言&#xff1a; 在日常工作当中&#xff0c;我们经常会遇到软件的界面出现卡顿的问题&#xff0c;而为了确定卡顿原因&#xff0c;我特地写了一个UI界面卡顿的小工具&#xff1a;UIHaltDetector&#xff1b;该工具可以在检测到目标窗口出现卡顿的时候直接打印堆栈日志和输出…