算法练习--顺序查找

背景:

  本来是想琢磨琢磨别的东西,前两天开始使用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

算法练习--顺序查找的相关文章

算法:顺序查找与折半查找

资料摘自:<数据结构c++语言描述> typedef int DataType; //顺序查找算法 //用顺序查找在n元数组list中查找与key等值的元素,返回该数组元素的下标 //若未找到,则返回-1 int SeqSearch(DataType List[], int n, DataType key) { for(int i = 0; i < n; i++) { if(List[i] == key) { return i; } } return -1; } /* *顺序查找的复杂度

【数据结构与算法】顺序查找

基本思想 顺序查找是最简单的查找方法,从线性表的一端开始,依次将每个记录的关键字与给定值进行比较. 代码实现 /** * 源码名称:SeqSearch.java * 日期:2014-08-13 * 程序功能:顺序查找 * 版权:[email protected] * 作者:A2BGeek */ public class SeqSearch { public static int seqSearch(int[] in, int key) { int length = in.length; int

Java中的查找算法之顺序查找(Sequential Search)

Java中的查找算法之顺序查找(Sequential Search) a) 原理:顺序查找就是按顺序从头到尾依次往下查找,找到数据,则提前结束查找,找不到便一直查找下去,直到数据最后一位. b) 图例说明: 原始数据:int[] a={4,6,2,8,1,9,0,3}; 要查找数字:8 找到数组中存在数据8,返回位置. 代码演示: import java.util.Scanner; /* * 顺序查找 */ public class SequelSearch { public static vo

Java查找算法(二): 顺序查找

[ 什么是顺序查找 ]  顺序查找又叫线性查找,是最基本的查找技术,它的查找过程是:从表中第一个或最后一个记录开始,逐个和给定的值比较,如相等则查找成功:如直到最后一个值仍不等时,则表中没有所查的记录,查找不成功. [ Java实现顺序查找 ]  public class SequentialSearch { public static void main(String[] args) { Integer target = 6; Integer[] iArr = { 3, 2, 6, 8, 5,

2. C#数据结构与算法 -- 查找算法(顺序查找,哈希查找,二分查找(折半),索引,二叉)

1. 顺序查找算法 ===================================================== 算法思想简单描述: 最突出的查找类型就是从记录集的开始处顺次遍历每条记录,直到找到所要的记录或者是 到达数据集的末尾.这就是所谓的顺序查找.顺序查找(也被称为线性查找)是非常容易实现 的.从数组的起始处开始,把每个访问到的数组元素依次和所要查找的数值进行比较.如果找 到匹配的数据项,就结束查找操作.如果遍历到数组的末尾仍没有产生匹配,那么就说明此数 值不在数组内. ==

【Java_Base】常用查找算法:顺序查找、二分查找

顺序查找 从第一个元素开始顺序比较查找. 二分查找 二分查找前提条件: 已排序的数组中查找 二分查找的基本思想是: 首先确定该查找区间的中间点位置: int mid = (low+upper) / 2; 然后将待查找的值与中间点位置的值比较: 若相等,则查找成功并返回此位置. 若中间点位置值大于待查值,则新的查找区间是中间点位置的左边区域. 若中间点位置值小于待查值,则新的查找区间是中间点位置的右边区域. 下一次查找是针对新的查找区间进行的. 1 public class Search{ 2 p

查找算法:二分查找、顺序查找

08年9月入学,12年7月毕业,结束了我在软件学院愉快丰富的大学生活.此系列是对四年专业课程学习的回顾,索引参见:http://blog.csdn.net/xiaowei_cqu/article/details/7747205 查找算法 查找算法是在存在的序列(list) 中查找特定的目标(target),要求序列中每个记录必须与一个关键词(key)关联才能进行查找. 查找算法通常需要两个输入: 1.被查找的序列 2.要查找的关键词 查找算法的输出参数和返回值: 1.返回类型为 Error_co

顺序查找

顺序查找属于查找中较容易的一个方法,且对数据是否已经排序没有要求,是很常用的一个查找算法. 但缺点是必须一个一个数字进行比较查找,查找所需步骤可能较多. 顺序查找算法的思想是,将目标与待查找数据进行比较,若发现与目标数据相同的数据,则查找停止, 返回此时被找到的数据的位置. // 算法设计 顺序查找 # include <stdio.h> int FindBySeq(int *ListSeq, int ListLength, int KeyData) // ListLength 表示数组长度

顺序查找和二分查找

1.使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组[转] 2.顺序查找 <?php//$n为待查找的数组元素的个数,$k为待查找的元素function seq_sch($array, $n, $k){ $array[$n] = $k; for($i=0; $i<$n; $i++){ if($array[$i]==$k){ return true;break; } } if ($i<$n) //判断是否到数组的末尾{ return $i