顺序查找(Sequential Search)

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/403703.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单的封装axios 不包含状态码和提示

复杂封装&#xff0c;包含提示和状态码的&#xff0c;点击这里查看 以下是简单封装axios的request.js文件&#xff1a; import axios from axios import router from ./../router import { Message } from element-ui// 设置axios全局默认的BASE-URL&#xff0c; 只要设置了全…

精确记录和恢复ListView滑动位置

工作中遇到一个需求&#xff0c;对ListView某一项操作后刷新ListView&#xff0c;但是如果直接刷新&#xff0c;界面上ListView从第一列开始显示&#xff0c;用户体验不好&#xff0c;于是在网上搜了一些恢复LIstView滑动位置的方法。解决办法如下&#xff1a; //给ListView设置…

时间戳倒计时

var defaultTimeStamp Math.floor(Date.now()/1000);var dayA defaultTimeStamp % (24 * 3600) //除去天数&#xff0c;得到剩余的小时时间戳var hourA dayA % (3600) //除去小时&#xff0c;得到剩余的分钟数时间戳var minuteA hourA % (60) …

python中使用sys模板和logging模块获取行号和函数名的方法

From: http://www.jb51.net/article/49026.htm 这篇文章主要介绍了python中使用sys模板和logging模块获取行号和函数名的方法,需要的朋友可以参考下对于python&#xff0c;这几天一直有两个问题在困扰我: 1.python中没办法直接取得当前的行号和函数名。这是有人在论坛里提出的问…

第二阶段冲刺(五)

昨天云服务 今天云服务 遇到的问题 转载于:https://www.cnblogs.com/qianxia/p/5525095.html

axios的content-type是自动设置的吗?

是根据提交的数据根式自动设置的 三种常见post提交和方式 axios中使用qs

MyBatis MapperScannerConfigurer配置——MyBatis学习笔记之八

在上一篇博文的示例中&#xff0c;我们在beans.xml中配置了studentMapper和teacherMapper&#xff0c;供我们需要时使用。但如果需要用到的映射器较多的话&#xff0c;采用这种配置方式就显得很低效。为了解决这个问题&#xff0c;我们可以使用MapperScannerConfigurer&#xf…

本地ip出口查询

获取/查看本机出口ip curl http://members.3322.org/dyndns/getip

使用Python获取Linux系统的各种信息

From: http://www.jb51.net/article/52058.htm 这篇文章主要介绍了使用Python获取Linux系统的各种信息,例如系统类型、CPU信息、内存信息、块设备等,需要的朋友可以参考下在本文中&#xff0c;我们将会探索使用Python编程语言工具来检索Linux系统各种信息。走你。 哪个Python版…

本地如何搭建IPv6环境测试你的APP

IPv6的简介 IPv4 和 IPv6的区别就是 IP 地址前者是 .&#xff08;dot&#xff09;分割&#xff0c;后者是以 :&#xff08;冒号&#xff09;分割的&#xff08;更多详细信息自行搜索&#xff09;。 PS&#xff1a;在使用 IPv6 的热点时候&#xff0c;记得手机开 飞行模式 哦&am…

HDU 2376 Average distance

HDU_2376 对于任意一棵子树来讲&#xff0c;以根节点为深度最浅的点的路径一共有两类&#xff0c;一类是以根节点为端点的路径&#xff0c;另一类是过根节点但端点分别在两棵子树中的路径。然后将无根树转化为有根树后dfs时计算出上面两类路径的长度即可。 #include<stdio.h…

meta http-equiv属性兼容浏览器_定时刷新

<meta http-equiv"X-UA-Compatible" content"IEedge"> #以上代码告诉IE浏览器&#xff0c;IE8/9及以后的版本都会以最高版本IE来渲染页面。 <meta http-equiv"refresh" content"30"> #每30秒钟刷新当前页面:

使用 Python 获取 Linux 系统信息的代码

From: http://www.jb51.net/article/52107.htm 在本文中&#xff0c;我们将会探索使用Python编程语言工具来检索Linux系统各种信息,需要的朋友可以参考下哪个Python版本? 当我提及Python&#xff0c;所指的就是CPython 2(准确的是2.7).我会显式提醒那些相同的代码在CPython 3 …

利用FPGA加速实现高性能计算

原文链接 原因&#xff1a;处理器本身无法满足高性能计算(HPC)应用软件的性能需求&#xff0c;导致需求和性能 之间出现了缺口。最初解决办法&#xff1a;使用协处理器来提升处理器的性能。协处理器&#xff08;基于硬件的设计&#xff09;具有三种能力&#xff1a;1.专门的硬件…

CSS实现半透明div层的方法

很不错的CSS透明效果&#xff0c;本实例是用CSS控制外层DIV不透明&#xff0c;而内层DIV透明&#xff0c;这样实现的效果是意想不到的&#xff0c;还不错吧&#xff0c;其实代码也是很简单的&#xff0c;也很好理解&#xff0c;主要是用了CSS的滤镜。 <html xmlns"http…

bootstrap .navbar-header 控制button隐藏/显示

bootstrap 的导航条标签做的很完美&#xff01;我们用这个标签主要解决手机端和PC端适配的问题&#xff0c;结果复制过来不能用。。 检查&#xff1a;是否引入bootstrap.css js; 再重点检查有没有下面这行代码。 <meta name"viewport" content"widthdevi…

“Content type ‘application/x-www-form-urlencoded;charset=UTF-8‘ not supported“解决方法

项目接口返回 code: 500 data: null message: “Content type ‘application/x-www-form-urlencoded;charsetUTF-8’ not supported” 原因在于&#xff0c;接口不支持application/x-www-form-urlencoded;charsetUTF-8 通过看swagger的接口传递数据类型来修改&#xff0c; 将…

新建第一个windows服务(Windows Service)

首先&#xff0c;请原谅我是一个小白&#xff0c;一直到前段时间才在工作需要的情况下写了第一个windows服务。首先说一下为什么写这个windows服务吧&#xff0c;也就是什么需求要我来写这么一个东西。公司的项目中&#xff0c;需要一个预警功能&#xff08;从数据库里取出需要…

Python获取电脑硬件信息及状态的实现方法

From: http://www.jb51.net/article/54470.htm 这篇文章主要介绍了Python获取电脑硬件信息及状态的实现方法,是一个很实用的技巧,需要的朋友可以参考下本文以实例形式展示了Python获取电脑硬件信息及状态的实现方法&#xff0c;是Python程序设计中很有实用价值的技巧。分享给大…

通过类或ID记录上一个被选中的标签或者数字

通过类或ID记录上一个被选中的标签或者数字 $(function () {$(document).on(click, .navbar-nav li a, function (e) {var $parant $(.navbar-nav li).index($(.navbar-nav li.active))var $index $(.navbar-nav li a).index(this)console.log($parant,$index);})})