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的结点,//成功时返回找到的结点位置,失败时返回0int 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较大时不宜采用顺序查找。

⑥  适用情况

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

转载于:https://www.cnblogs.com/yedushusheng/p/5524175.html

顺序查找(Sequential Search)相关推荐

  1. 顺序查找(Linear Search)

    顺序查找,也叫线性查找,从列表第一个元素开始,顺序进行搜索, 直到找到元素或搜索到列表最后一个元素为. def linear_search(li,value):for i,v in enumerate ...

  2. (王道408考研数据结构)第七章查找-第二节1:顺序查找及其优化

    文章目录 一:顺序查找基本思想 二:效率分析 三:顺序查找优化(针对查找表为有序表) 四:顺序查找优化(针对查找概率不相等) 一:顺序查找基本思想 顺序查找(Sequential Search):又叫 ...

  3. 顺序查找(线性表的查找)

    顺序查找 顺序查找(Sequential Search)的查找过程为:从表的一端开始,依次将记录的关键字和给定值进行比较,若某个记录的关键字和给定值相等,则查找成功:反之,若扫描整个表后,仍未找到关键 ...

  4. 经典算法之顺序查找(Sequential Search)

    活动地址:CSDN21天学习挑战赛 学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩:迟一天就多一天平庸的困扰. 文章目录 1. 前言 2. 算法基本概念 4. 顺序查找 4.1 伪代码 4.2 ...

  5. 经典算法之顺序查找法

    活动地址:CSDN21天学习挑战赛 前言 已经进入八月份了,暑假也正式进入倒计时.本人前段时间在学习前端中移动端部分的微信小程序开发知识,也算勉勉强强能入门(因为没有前端三件套的基础,前端居然是从小程 ...

  6. 简述java实现冒泡排序和顺序查找

    目录 一.冒泡排序(Bubble Sort) 程序思路: 化繁为简: 先死后活: 代码效果: 二.顺序查找 程序分析: 代码实现: 代码效果: 一.冒泡排序(Bubble Sort) 也是一种简单直观 ...

  7. 顺序查找(算法学习)

    ​ ​ 活动地址:CSDN21天学习挑战赛 学习日记 一,顺序查找 1,什么是查找 查找就是从从某个数据结构中找出指定条件的元素,找到满足的条件元素便表示查找成功,反之代表查找失败,查找的方式也会根据 ...

  8. 14.查找概论与顺序查找

    一.查找概论 1.查找:即依据给定的某个值,在查找表中确定一个其keyword等于给定值的数据元素(或纪录).若表中不存在keyword等于给定值的纪录.则称查找不成功,此时查找的结果可给出一个&qu ...

  9. 顺序查找(c/c++)

    顺序查找 顺序查找分为对无序表和有序表的查找: 对无序表的查找算法如下: int search(int* array, int num,int key)//数组下标从0开始 {int i=num;wh ...

最新文章

  1. dwarf tower
  2. Microsoft office 2007 word PPT 转pdf的插件(转)
  3. js变量后面加问号是什么_js没那么简单(1)-- 执行上下文
  4. 问题描述: 在一个圆形操场的四周摆放着n 堆石子。现要将石子有次序地合并成一堆。 规定每次只能选相邻的2 堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的得分。 试设计一个算法,计算出将n堆石子
  5. 工程勘察设计收费标准2002修订版_黑龙江省哈尔滨新区智能轨道快运系统1号线项目勘察设计招标...
  6. Google Guava库必需品
  7. TSQL中实现ORACLE的多列IN 多列匹配。
  8. DBA邀请函丨数据库大咖讲坛来深圳啦!线下沙龙+线上直播,共享技术盛会!
  9. android修改自动背光,Android LCD和键盘 背光亮度设置
  10. 多分类f1分数_机器学习之分类模型评估总结
  11. 【原创】在Windows 环境下利用SVN和Apache以及Ankh配置源代码管理服务
  12. 被脱库咋办?KMS 给你解决方案!
  13. 很好用的数据库设计工具PDMan,强力推荐
  14. 2021年焊工(初级)报名考试及焊工(初级)新版试题
  15. html5制作星星闪烁和制作时钟
  16. cad断点快捷键_CAD打断(BREAK)命令的使用技巧
  17. 养不起真猫,就用代码吸猫-Unity粒子实现画猫咪
  18. 向日葵远程桌面连接教程(Windows与Linux互连)
  19. python猜字游戏猜三次_python 猜字游戏
  20. ThinkPHP根据时间显示不同的问候语

热门文章

  1. 基础总结篇之中的一个:Activity生命周期
  2. iOS 证书与签名 解惑详解
  3. session的存储方式
  4. 主成分分析(PCA)原理详解 2016/12/17 · IT技术 · 主成分分析, 数学 分享到: 21 原文出处: 中科春哥 一、PCA简介 1. 相关背景 主成分分析(Principa
  5. 叠数的加法与字符串 RUNOOB python练习题 18
  6. Centos用户和用户组管理
  7. log日志轮转--logrotate
  8. JNI通过线程c回调java层的函数
  9. Apache Shiro 简介
  10. Ubuntu 12.04 修改/etc/resolv.conf重启后还原成修改前状态解决办法