1.1.6 查找技术

所谓查找是指在一个给定的数据结构中查找某个指定的元素。在查找的过程中,涉及查找的方法等问题,通常,根据不同的数据结构,应采用不同的查找方法。

1.顺序查找

顺序查找又称顺序搜索。顺序查找一般是指在线性表中查找指定的元素,其基本方法如下:

从线性表的第一个元素开始,依次将线性表中的元素与被查元素进行比较,若相等则表示找到(即查找成功);若线性表中所有的元素与被查元素进行了比较但都不相等,则表示线性表中没有要找的元素(即查找失败)。

在进行顺序查找过程中,如果线性表中的第一个元素就是被查找元素,则只需做一次比较即可查找成功,查找效率最高;但如果被查找的元素是线性表中的最后一个元素,或者被查元素根本不在线性表中,则为了查找这个元素需要与线性表中所有的元素进行比较,这是顺序查找的最坏情况。在平均情况下,利用顺序查找法在线性表中查找一个元素,大约要与线性表中一半的元素进行比较。

由此可以看出,对于大的线性表来说,顺序查找的效率是很低的。虽然顺序查找的效率不高,但在下列两种情况下也只能采用顺序查找。

1)如果线性表为无序线性表(即表中元素的排列是无序的),则不管是顺序存储结构还是链式存储结构,都只能用顺序查找。

2)即使是有序线性表,如果线性表采用链式存储结构,也只能用顺序查找。

2.二分法查找

二分法查找只适用于顺序存储的有序表。在此所说的有序表是指线性表中的元素按值非递减排列(即从小到大,但允许相邻元素值相等)。

设有序线性表的长度为n,被查元素为x,则二分查找的方法如下。

将x与线性表的中间项进行比较。

1)若中间项的值等于x,则说明查找成功,查找结束。

2)若x小于中间项的值,则在线性表的前半部分(即中间项以前的部分)以相同的方法进行查找。

3)若x大于中间项的值,则在线性表的后半部分(即中间项以后的部分)以相同的方法进行查找。

这个过程一直进行到查找成功或子表长度为0(说明线性表中没有这个元素)为止。