vlambda博客
学习文章列表

C语言实现折半查找算法

折半查找法又称为二分查找法

优点是比较次数少,查找速度快,平均性能好
缺点是要求待查表为有序表,若无序得先排序
折半查找方法适用于不经常变动而查找频繁的有序列表



一、基本思想


折半查找的的前提是表中元素是有序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。
重复以上过程,直到找到满足条件的记录,此时查找成功;或直到子表不存在为止,此时查找不成功。


下图是有8个数据元素,假设存放在数组a[8]中
目标关键字是7

C语言实现折半查找算法

第一次折半后,关键字是 (0+7)/2,a[3]=4,4不等于7,且4小于7所以,继续查询的目标为右边的字表,调整起点,起点设置为 a[3+1],终点不变,仍然是7
第二次折半,(4+7)/2=5 a[5]=6还是不等于7,且6<7,调整起点为a[6]
第三次折半,(6+7)/2=6 a[6]=7,查找的关键字等于折半的关键字,返回数组下标6
经过三次折半,找到数组元素a[6]记录查找关键字



二、时间复杂度

二分查找的基本算法
目标值设为x,数组a中存储一组有序数列,数列的长度为n,数组元素是从a[0]至a[n-1],注意实际代码中的数组下标的设置,下列算法仅做描述
(1)   将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],即x为中间值,则找到x,返回数组下标,算法中止;
(2)   如果x<a[n/2],基则只要在数组a的左半部分继续搜索x
(3)   如果x>a[n/2],则只要在数组a的右半部搜索x
时间复杂度就是求while循环的次数。
假设总共有n个元素,每次查找的区间大小就是n,n/2,n/4,…,n/2^k,其中k就是循环的次数。




三、折半查找的C语言实现  



折半查找(二分法排序)的对转本考生的意义


1.函数调用的框架

2.数组作为实参和形参的方法

3.数组的定义、初始化,数组元素的使用

4.折半查找作为经典查找方法,是考试大概率考察题型之一




白羊叔 2023战斗群

超前备考  已经开设

为学长学姐加油

快人一步