7.1 顺序表查找

顺序查找(Sequential Search)又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个(或者最后一个)记录开始,逐个进行记录的关键字和给定值比较,若某个记录的关键字和给定值相等,则查找成功,找到所查的记录;如果直到最后一个(或者第一个)记录,其关键字和估计值比较都不等时,则表中没有所查的记录,查找不成功。

具体代码为:

<?php
header("content-type:text/html;charset=utf-8");
/**
 * 顺序查找操作操作
 *
 *包括
 * 1.初始化 __contruct()
 * 2.普通顺序查找 search_none()
 * 3.有哨兵顺序查找 search()

 */
class Sequential_search{
    private $a;
    private $length;

    //初始化
    public function __construct($a = array())
    {
        $this->length = count($a);
        for ($i = 1;$i<=$this->length;$i++){
            $this->a[$i] = $a[$i-1];
        }


    }

    //普通顺序查找
    public function search_none($key){
        for ($i = 1;$i<=$this->length;$i++){
            if($this->a[$i]==$key){
                return $i;
            }
        }
        return 0;
    }

    //有哨兵顺序查找
    public function search($key){
        $this->a[0] =$key;     //设置a[0]为关键字,我们称之为哨兵
        $i = $this->length;   //循环数组从尾部开始
        while ($this->a[$i] !=$key){
            $i--;
        }
        return $i;          //返回0则说明查找失败
    }
}
?>

实现上述函数:

<?php
header("content-type:text/html;charset=utf-8");
include "sequential_search.class.php";

$a = array("小","林","子","奋","斗","的","点","滴");
$sequential_search = new Sequential_search($a);
echo "初始化数组:";
echo "</br>";
print_r($sequential_search);
echo "</br>";
echo "</br>";

$key = $sequential_search->search_none("林");
echo "普通顺序查找“林”在数组中的位置:";
echo "</br>";
echo $key;
echo "</br>";
echo "</br>";

$key = $sequential_search->search("林");
echo "此时数组为:";
echo "</br>";
print_r($sequential_search);
echo "</br>";
echo "</br>";

echo "有哨兵顺序查找“林”在数组中的位置:";
echo "</br>";
echo $key;
?>

最后的实现结果为:

对于顺序查找算法来说,查找成功最好的情况就是在第一个位置就找到了,算法的时间复杂度为O(1),最坏的情况是在最后一个位置才找到,需要n次比较,时间复杂度为O(n),当查找不成功时,需要n+1次比较,时间复杂度为O(n)。关键字在任何位置的概率是相同的,所以平均查找次数是(n+1)/2,所以最终的时间复杂度还是O(n)。

原文地址:https://www.cnblogs.com/xlzfdddd/p/9891387.html