背景:
本来是想琢磨琢磨别的东西,前两天开始使用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 ] ,之前写的直接插入排序中也有提到,当时没太看懂它的终止标志的作用,不过在这里到是完全明白了。
时间: 2024-10-02 23:26:26