
查找是最常见的数据操作之一,常见的查找技术有两种:一是顺序查找;另一个是折半查找。

顺序查找是人们最熟悉的查找策略,对于小规模的数据,顺序查找是个不错的选择。顺序查找的方法是从数据的第一个元素开始,依次比较,直到找到目标数据或查找失败。算法最好情况是第一个元素就是目标数据,最糟糕的情况是最后一个元素才是目标的数据。顺序查找平均关键字匹配次数为表长的一半。
顺序查找的步骤
(1)从表中的第一个元素开始,依次与关键字比较。
(2)若某个元素匹配关键字,则查找成功,并退出查找。
(3)若查找到最后一个元素还未匹配关键字,则查找失败。

伪代码如下:
input a[6]={2,6,4,7,5,4},i=1
input m
for i=1 to 6
ifa[i]=m then
output “Find it, it is at" & i & "site.”
exit
endif
endfor
if i>6 then output " Not Find it."
流程图如下:


折半查找,也称二分查找,是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程结束;如果某一特定元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。这种搜索算法每一次比较都使搜索范围缩小一半。正因为如此,折半查找效率较高。
折半查找法的优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
折半查找的步骤
(1)首先将原始数据进行排序。
(2)确定整个查找区间的中间位置 mid = ( left + right )/2 。
(3)用待查关键字值与中间位置的关键字值进行比较;若相等,则查找成功;若大于,则在后(右)半个区域继续进行折半查找;若小于,则在前(左)半个区域继续进行折半查找。
(4)对确定的缩小区域再按折半公式,重复上述步骤。
(5)最后,得到结果:要么查找成功, 要么查找失败。

伪代码如下:
input a[6]={2,6,4,7,5,4},bottom=1,top=6
sort(a) // 对原始数据进行排序
mid=(bottom+top)/2
while bottom<=top do
if a[mid]=a[des] then
output a[mid]
else if a[des] < a[mid] then
top = mid-1
else
bottom= mid +1
endif
endwhile
