码迷,mamicode.com
首页 > 编程语言 > 详细

算法练习--顺序查找

时间:2016-04-10 19:18:26      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

背景:

  本来是想琢磨琢磨别的东西,前两天开始使用xdebug+webgrind。感觉用着挺方便的,不过还只是初学,很多功能尚未了解。没有方向做一些东西,那就继续打打基础,今天开始看查找这一块。

正题:

  顺序查找——顺序查找是在一个已知无(或有序)序队列中找出与给定关键字相同的数的具体位置。原理是让关键字与队列中的数从最后一个开始逐个比较,直到找出与给定关键字相同的数为止,它的缺点是效率低下。

  概念说的很清楚,缺点也很容易看出来,直接贴代码(我这里是以顺序表为例)。

  

<?php
/**
 * 线性表节点类
 * 用于存储数字集的值并实现线性表的顺序查找
**/
class rectype{


    /**
     * 存储数字值
     *
     * @var int
     */
    public $val;


    /**
     * 存储其他信息
     *
     * @var mix
     */
    public $other;

    public function __construct($val,$other=null)
    {
        $this->val = $val;
        $this->other = $other;
    }
}

/**
 *  搜索给定数串中某关键字的位置
 *
 *  @param array 给定数字集数组
 *  @param int    待查找的关键数字
 *
 *  return int   返回位置,如果没找到返回false
 */
function Seq_search($search_val , $search_key)
{
    $r = array();
    init_rectype($r , $search_val , $search_key);
    
    $num = count($r);
    while($r[$num--]->val != $search_key);
    if($num<0)
    {
        return false;
    }
    else
    {
        return $num+1;
    }

}

/**
 *  建立顺序结构线性表
 *
 *  @param array 线性表数组容器
 *  @param array 线性表单元值的集合
 *  @param int   待查找的关键数字
 *
 *  return 
 */
function init_rectype(&$r , $search_val , $search_key)
{
    $r[0] = new rectype($search_key);
    if(is_array($search_val))
    {
        foreach($search_val as $val)
        {
            $r[] = new rectype($val);
        }

    }
    else
    {
        exit(‘无法识别搜索类型‘);
    }
    return ;
}


//test
$search = array(5,3,48,646,489,123,465468,12,54,6,2);
$search_key = 12;
$result = Seq_search($search , $search_key);
if($result !== false)
{
    echo $search_key,‘处于序列的第‘,$result,‘位‘;
  //12处于序列的第8位 }
else { echo $search_key,‘不存在该序列中‘; } ?>

 

这里也有一个监视哨 r [ 0 ] ,之前写的直接插入排序中也有提到,当时没太看懂它的终止标志的作用,不过在这里到是完全明白了。

 

  

算法练习--顺序查找

标签:

原文地址:http://www.cnblogs.com/onyourway/p/5374914.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!