数据结构与算法之查找算法
创始人
2024-02-22 06:48:09
0

数据结构与算法——查找算法

本文将不断更新查找有关算法,由于精力有限,因此本博文将分多次更新,感谢您的关注

文章目录

  • 数据结构与算法——查找算法
    • 1. 二分法查找(折半查找)
      • 1.1 算法叙述
      • 1.2 实例说明
    • 2. 插值查找(比例查找)
      • 2.1 算法叙述
      • 2.2 实例说明
    • 3. 斐波那契查找(黄金分割法查找)
      • 3.1 算法叙述
      • 3.2 实例说明
    • 4. 线性索引查找
      • 4.1 算法叙述
      • 4.2 实例说明

1. 二分法查找(折半查找)

1.1 算法叙述

  • 二分法查找又称折半查找,顾名思义也就是将待查找范围不断折半直到不能再折为止

  • 适用范围:数据表是顺序结构,也就是从小到大或从大到小已经排好序

  • 算法复杂度:O(logn)

  • 思路如下图:
    在这里插入图片描述

1.2 实例说明

  • 以NTC温度转化为例,通过ADC采集到NTC的电压之后,计算出NTC的电阻值,之后采用查表的方案查询此NTC阻值所对应的温度

  • 本文已 TSM1A682J3952RZ 这颗NTC电阻为例,数据手册地址:NTC数据手册地址

  • 代码如下:

    • temperature 内记录了从数据手册内获取到的NTC从 -40 ~ 125℃ 所对应的阻值
    • sort_dichotomy 为二分法查找算法实现
#include /* ntc -40 ~ 125℃ 阻值 */
const float temperature[] = {249.76, 233.36, 218.16, 204.07, 190.98, 178.8, 167.47, 156.9, 147.06, 137.88,129.31, 121.31, 113.85, 106.88, 100.38, 94.3, 88.626, 83.325, 78.372, 73.743,69.417, 65.372, 61.589, 58.05, 54.738, 51.638, 48.735, 46.015, 43.466, 41.075,38.833, 36.729, 34.753, 32.897, 31.153, 29.513, 27.97, 26.518, 25.151, 23.863,22.649, 21.505, 20.426, 19.407, 18.445, 17.537, 16.679, 15.868, 15.101, 14.375,13.688, 13.039, 12.423, 11.84, 11.288, 10.765, 10.269, 9.7981, 9.3517, 8.9281,8.5261, 8.1445, 7.7821, 7.4379, 7.1108, 6.8, 6.5046, 6.2237, 5.9565, 5.7024,5.4606, 5.2305, 5.0115, 4.8029, 4.6043, 4.4151, 4.2348, 4.063, 3.8992, 3.743,3.594, 3.4519, 3.3163, 3.1869, 3.0633, 2.9453, 2.8326, 2.7249, 2.6219, 2.5235,2.4294, 2.3394, 2.2533, 2.1709, 2.0921, 2.0166, 1.9442, 1.8749, 1.8086, 1.7449,1.6839, 1.6254, 1.5693, 1.5154, 1.4637, 1.4141, 1.3664, 1.3207, 1.2767, 1.2344,1.1938, 1.1548, 1.1172, 1.0811, 1.0463, 1.0128, 0.98063, 0.94961, 0.91974, 0.89097,0.86325, 0.83654, 0.81079, 0.78596, 0.76202, 0.73894, 0.71667, 0.69518, 0.67444, 0.65443,0.63512, 0.61647, 0.59846, 0.58107, 0.56427, 0.54804, 0.53237, 0.51722, 0.50258, 0.48843,0.47475, 0.46153, 0.44875, 0.43639, 0.42443, 0.41288, 0.4017, 0.39089, 0.38043, 0.37031,0.36052, 0.35105, 0.34189, 0.33303, 0.32445, 0.31616, 0.30813, 0.30035, 0.29284, 0.28556,0.27852, 0.2717, 0.26511, 0.25873, 0.25255, 0.24658
};/*** @brief 二分法查找算法* * @param elem 待查找数据* @param table 数据表* @param table_size 数据表大小* @return int -1:参数错误 >=0:待查找元素所在表中位置*/
int sort_dichotomy(float elem, const float *table, int table_size)
{int mid = 0, left = 0, right = 0;if (table == NULL || table_size == 0)return -1;left = 0;right = table_size - 1;mid = (left + right) / 2;if (elem > table[0]){return 0;}else if (elem < table[table_size - 1]){return right;}while (left < right){if (elem > table[mid]){right = mid;mid = (left + right) / 2;}else if (elem < table[mid]){left = mid;mid = (left + right) / 2;}else if (elem == table[mid]){break;}if (left == mid){break;}else if (right == mid){mid += 1;break;}}printf("mid:%d left:%d right:%d\n", mid, left, right);return mid;
}int main(int argc, char **argv)
{printf("*************************\n");printf("二分法排序\n");printf("*************************\n");int temp = 0;temp = sort_dichotomy(17.5f, temperature, sizeof(temperature));temp -= 40;printf("temperature is:%d\n", temp);return 0;
}

2. 插值查找(比例查找)

2.1 算法叙述

//TODO

2.2 实例说明

//TODO

3. 斐波那契查找(黄金分割法查找)

3.1 算法叙述

//TODO

3.2 实例说明

//TODO

4. 线性索引查找

4.1 算法叙述

//TODO

4.2 实例说明

//TODO


由于精力有限,因此本博文将分多次更新,感谢您的关注!

创作不易,转载请注明出处!

关注、点赞+收藏,可快速查看后续分享哦!

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...