顺序查找与折半查找(二分查找) --数据结构与算法

知识共享许可协议 版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (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)

猜你喜欢

转载自blog.csdn.net/Thanlon/article/details/93527745