版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
一、顺序查找
1、顺序查找的思想
将待查找的关键字为key的元素从头到尾与表中元素进行比较,如果中间存在关键字为key的元素,则返回查找成功;否则返回查找失败。
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
---|
2、顺序查找的平均查找长度
ASL = (n+1)/ 2
时间复杂度:O(n)
二、折半查找(二分查找)
1、折半查找的思想
不是所有的序列都可以用折半查找法,折半查找的前提是:查找的序列中的数是有序(从大到小或者从小到大)排列的。
2、查找过程
【例题】请给出在含有12个元素的有序表{1,4,10,16,17,18,23,29,33,40,50,51}中查找关键字17的过程:
将12个元素按照顺序排序(正序和逆序都可以):
1 | 4 | 10 | 16 | 17 | 18 | 23 | 29 | 33 | 40 | 50 | 51 |
---|
第一轮查找:将第一个元素的位置下标与最后一个元素的位置下标相加,然后除以2向下取整,得到17第一次要比较的数值。(1+12)/2 =6.5,向下取整就是6。所以,17要与下标为6的数值做比较,下标6对应的数值是18。因为17<18,所以17必然在下标为6的左边部分,把查找的范围缩小一半。
第二轮查找:(1+5)/2 = 3,所以17要与3对应的数值进行比较。因为17>10,所以17应该在4的左边部分。
第三轮查找:范围缩小到4~5之间,(4+5)/2 = 4.5,则17要与下标4所在位置的值做比较。因为17>16,所以17在坐标为4的右边部分
第四轮查找:(5+5)/2 = 5,17与下标为5的值做比较,17=17,所以只有下标为5符合题意。
3、折半查找的时间复杂度
折半查找在查找成功时,关键字的比较次数最多为:log2n +1次
折半查找的时间复杂度:O(log2n)