zoukankan      html  css  js  c++  java
  • 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)。

  • 相关阅读:
    Indy的TCPServer到底能支持多少个连接
    Delphi TStream 详细介绍
    WebAPI下的如何实现参数绑定
    使用 Weinre 调试移动网站及 PhoneGap 应用
    面向对象的三大特征:封装、继承、多态
    轻量级前端MVVM框架avalon
    三种工厂模式的分析以及C++实现
    简单实现TCP下的大文件高效传输
    Nunit NMock Ncover单元测试
    算法实践——数独的基本解法
  • 原文地址:https://www.cnblogs.com/xlzfdddd/p/9891387.html
Copyright © 2011-2022 走看看