文档章节

顺序查找(Sequential Search)

 野渡书生
发布于 2016/04/28 20:26
字数 1110
阅读 49
收藏 1

1、定义

顺序查找又叫线性查找,是最基本的查找技术

2、基本思想

     从表的一端开始(第一个或最后一个记录),顺序扫描线性表,依次将扫描到的结点关键宇和给定值K相比较。若当前扫描到的结点关键字与K相等,则查找成功;若扫描结束后,仍未找到关键字等于K的结点,则查找失败。

3、存储结构

  顺序查找方法既适用于线性表的顺序存储结构,也适用于线性表的链式存储结构使用单链表作存储结构时,扫描必须从第一个结点开始)。

        注意:单链表为什么从第一个扫描,而不是最后一个,这与其存储结构有关,单链表名字即表示第一个第一个结点的地址,而不是最后一个结点的地址。

4、顺序查找算法

(1)类型说明

  typedef struct{
    KeyType key;
    InfoType otherinfo; //此类型依赖于应用
   }NodeType;
  typedef NodeType SeqList[n+1]; //0号单元用作哨兵

(2)具体算法

/*顺序查找,参数说明:
    a——数组;
    n——要查找的数组个数;
    key——要查找的关键字
*/
int SeqSearch(int *a,int n,int key)
//这里是指针引用
{ 
    int i; 
    for(i=1;i<=n;i++){
    //缺陷:每次循环都需要对i是否越界,即是否小于等于n做判断
        if(a[i]=key)
            return i;
    }
    return 0; 
    }

上述操作中,每次循环都需要对i是否越界,即是否小于等于n做判断,我们可以设置一个哨兵,不需要每次i与n作比较,改进方案如下:

/*有哨兵的顺序查找*/
int SeqSearch(int *a,int n,int key)
//这里是指针引用
{ 
    int i; 
    a[0]=key;
    /*设置a[0]为关键字值,我们称之为“哨兵”,当然也可以设置最后一个元素为“哨兵”*/
    int n;
    /*循环从数组尾部开始*/
    while(a[i]!=key)
    {
        i--;
    }
    return i; 
    /*返回0说明查找失败*/
    }

当然参数也可以如下设置,把元素个数放在数据结构体中定义:

int SeqSearch(Seqlist R,KeyType K)
{ 
   //在顺序表R[1..n]中顺序查找关键字为K的结点,
   //成功时返回找到的结点位置,失败时返回0
   int i;
   R[0].key=K; 
   //设置哨兵
   for(i=n;R[i].key!=K;i--); 
   //从表后往前找
   return i; 
   //若i为0,表示查找失败,否则R[i]是要找的结点
}

3、算法分析

①  算法中监视哨R[0]的作用

    为了在for循环中省去判定防止下标越界的条件i≥1,从而节省比较的时间。

成功时的顺序查找的平均查找长度:

      

    在等概率情况下,pi=1/n(1≤i≤n),故成功的平均查找长度为

        (n+…+2+1)/n=(n+1)/2

    即查找成功时的平均比较次数约为表长的一半。

    若K值不在表中,则须进行n+1次比较之后才能确定查找失败。

表中各结点的查找概率并不相等的ASL

【例】在由全校学生的病历档案组成的线性表中,体弱多病同学的病历的查找概率必然高于健康同学的病历,由于上式的ASLsq在pn≥pn-1≥…≥p2≥p1时达到最小值。

    若事先知道表中各结点的查找概率不相等和它们的分布情况,则应将表中结点按查找概率由小到大地存放,以便提高顺序查找的效率。

    为了提高查找效率,对算法SeqSearch做如下修改:每当查找成功,就将找到的结点和其后继(若存在)结点交换。这样,使得查找概率大的结点在查找过程中不断往后移,便于在以后的查找中减少比较次数。

顺序查找的优点

    算法简单,且对表的结构无任何要求,无论是用向量还是用链表来存放结点,也无论结点之间是否按关键字有序,它都同样适用。

顺序查找的缺点

    查找效率低,因此,当n较大时不宜采用顺序查找。

⑥  适用情况

    对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找。

© 著作权归作者所有

下一篇: 查找
粉丝 9
博文 217
码字总数 158821
作品 0
南京
私信 提问
20180312顺序查找

前置知识 本期内容 名词解释 + (Sequential Search)略 实现 + 没有监视哨 + 有监视哨 总体评价 + 算法复杂度太高,不管是查找成功还是失败,都要O(n),数据表越长时,缺点会致命。+ 适用场...

im天行
2018/03/12
5
0
查找——顺序查找

一、顺序查找的概念 顺序查找(Sequential Search)是最简单的一种查找方法。其基本思想是:从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找...

翼动动空
2016/06/27
3.5K
0
常见的计算机专业词汇

作为计算机相关专业学生,面试或者笔试时不可避免地会遇到与专业相关的问题,而考核专业问题的时候,又不可避免地涉及到很多专业词汇,这就需要求职者掌握好常见的专业词汇,才能在阐述问题时...

长平狐
2012/10/08
421
0
文件系统性能自动化测试工具--Bonnie++

Bonnie++ 是一款文件系统的基准性能自动化测试工具,包括测试文件系统的读写能力、查找能力、创建新文件的能力,它通过一系列的简单测试来生成文件系统的性能参数。其主程序提供两种风格的测...

匿名
2011/08/10
993
0
简单描述一下二分查找和顺序查找

<?php class search { // 查找的源数组 private $array = array(1,2,3,5,7,6,4,8); /** * 顺序查找法 * @param $val 要查找的值 */ public function query_search($val) { foreach ($this->......

saintatgod
2014/03/26
306
0

没有更多内容

加载失败,请刷新页面

加载更多

总结:单机与分布式

传统计算方案演变 1、单机并行运算 1,打开数据源 2,统计出有多少个文件。 3,为每个文件执行相同的统计命令 4,等待所有命令执行成功。 5,合并统计后结果输出或执行进一步统计 2、分布式并...

浮躁的码农
26分钟前
5
0
关于怎么解决CENTOS7没有ETH0网卡这个问题

CentOS7系统安装完毕之后,输入ifconfig命令发现没有eth0,不符合我们的习惯。而且也无法远程ssh连接。 1.进入目录/etc/sysconfig/network-scripts/ 2.将文件ifcfg-ens33重命名为ifcfg-eth0;...

无名氏的程序员
32分钟前
5
0
HTML5 Web Storage 存储介绍

Web Storage是HTML5 API提供一个新的重要的特性; 最新的Web Storage草案中提到,在web客户端可用html5 API,以Key-Value形式来进行数据持久存储; 目前主要的浏览器已经支持该功能: 常见的...

前端老手
40分钟前
4
0
安装mxnet出现的错误

我出现下面的错误:是因为我前面的安装步骤都正确,只是这一步出现错误,sudo python setup.py install 其实我看了下我默认的python是3.6,是大于3.5 ,改为sudo python3 setup.py install就...

南桥北木
42分钟前
4
0
boot-组件

一、下拉菜单 二、button组 三、弹框 四、导航 boot提了三种形式的导航:水平导航、选项卡导航、胶囊导航

wytao1995
45分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部