当前位置: 首页 > news >正文

数据结构14:查找

简介

与排序相同,查找在编程中也有很多的应用,本章将对普通查找、二分法查找、插值查找这三种查找方法。

普通查找:

普通查找就是最简单的查找方式,遍历数据直到找到要查找的数据,它对数据的排列方式没有要求。
代码实现:
i

nt SimpleSearch(int *data, int len,int search)
{int i;//数据参数检测if (data == NULL || len < 0){return -1;}for (i = 0; i < len; i++){//如果找到该数据,返回数据所在的位置if (data[i] == search){return i;}}//返回-2 代表没有要查找的数据return -2;
}

二分法查找:

二分法查找需要对数据进行排序,然后将数据平均分为两个区间,然后对所查找数据所在的区间在进行划分,继续查找,直到找到或者找不到。
代码实现:

int BinarySearch(int *data, int len, int search)
{int high, low, mid;//数据参数检测if (data == NULL || len < 0){return -1;}low = 0;high = len - 1;while (high >= low){mid = (high + low) / 2;if (data[mid] == search){return mid;}else if (data[mid] > search){high = mid - 1;}else if (data[mid] < search){low = mid + 1;}}//返回-2 代表没有要查找的数据return -2;
}

在源数据:1、2、3、4、5中,查找数据1,如图1所示:
第一次查找,查找区间0-4,中间数据为3,缩小区间;
第二次查找,查找区间0-2,中间数据为2,继续缩小区间;
第三次查找,查找区间0-1,找到数据1。
在这里插入图片描述

插值查找:

插值查找与二分查找类似,只是中间值得算法不同。在二分查找中:
mid = (high + low) / 2
在插值查找中:
mid = low + (search - data[low]) / (data[high] - data[low])*(high - low)
从公式中可以可以看出,插值查找能更好的根据数据的特性来进行查找。
代码实现

int InsertSearch(int *data, int len, int search)
{int high, low, mid;//数据参数检测if (data == NULL || len < 0){return -1;}low = 0;high = len - 1;while (high >= low){mid = low + (search - data[low]) / (data[high] - data[low])*(high - low);if (data[mid] == search){return mid;}else if (data[mid] > search){high = mid - 1;}else if (data[mid] < search){low = mid + 1;}}//返回-2 代表没有要查找的数据return -2;
}
http://www.dtcms.com/a/528033.html

相关文章:

  • 怎样做网站模板wordpress用阿里云oss
  • Spring Java配置:告别XML新时代
  • Flutter 异步进阶:Isolate 与 compute 的性能优化实践
  • 太原网站建设模板网页制作的公司怎么注册
  • Linux拓展
  • 亚马逊云渠道商:本地SSD缓存如何保障数据安全?
  • seo外包公司排名深圳网站优化最好的方法
  • SQL优化详解与案例、以及索引失效场景;
  • llama.cpp:Linux_x86端测试Qwen2.5-Omni
  • Java-160 MongoDB副本集部署实战 单机三实例/多机同法 10 分钟起集群 + 选举/读写/回滚全流程
  • 使用RedisTemplate设计一个消息队列?
  • 海龟交易系统R
  • 【攻防实战】Redis未授权RCE联动metasploit打穿三层内网(上)
  • 织梦网站图片修改不了wordpress模板开发 2016
  • .Net Framework 3.5下载安装教程(附安装包)
  • pycharm远程提交Git
  • PLM实施专家宝典:离散制造企业工程变更的“流程金融”方案
  • Orleans分布式系统架构详细分析
  • 建设网站的价钱深圳宝安上市公司网站建设报价
  • F034 vue+neo4j 体育知识图谱系统|体育文献知识图谱vue+flask知识图谱管理+d3.js可视化
  • 【day10】分治
  • 【Go】C++转Go:数据结构练习(一)排序算法
  • 每天学习一个新注解——@SafeVarargs
  • valgrind交叉编译android版本
  • 公司网站开发设计题目来源怎么写佛山免费建站怎样
  • 构建AI智能体:七十四、探索AI新纪元:扣子平台让想法到智能应用的极简之旅
  • P2119 [NOIP 2016 普及组] 魔法阵
  • 数据结构13:排序
  • 网站搭建 里短信wordpress acf破解版
  • 【C/C++】数据在内存中的存储