顺序查找

顺序查找分为对无序表和有序表的查找:
对无序表的查找算法如下:

int search(int* array, int num,int key)//数组下标从0开始
{int i=num;while (i >= 0 && array[i] != key)--i;return i; //i为-1时出错
}
int search(int* array, int num, int key)//数组下标从1开始
{int i = num;array[0] = key;//下标0处为监视位while (array[i] != key)--i;return i;//i为0时出错
}

ASL(成功)=(1+2+…+n)/n=(n+1)/2,类似对号入座,第一个数试一次成功,第二个数试两次,…第n个数试n次,然后求平均次数,再除以n即可。
ASL(失败)=n+1;将所有数都试一遍之后,再试一次发现数组越界,退出,故为n+1

将数组下标0设为监视位,数组从下标1开始存储数据,假定为升序的顺序表的直接查找算法:

int sq_search(int* array, int num, int key)
{int i = num;array[0] = key;if (array[i] < key)return 0;while (array[i] != key)--i;return i;//i为0时出错
}

ASL(成功)=(1+2+…n)/n=(n+1)/2
ASL(失败)=(1+2+…+n+1)/(n+1)=(n+2)/2
在直接查找的基础上更进一步,采用折半查找,代码如下:

int b_search(int* array, int num, int key)
{int low = 1, high = num, mid;if (key<array[1] || key>array[num])//升序return 0;while (low <= high){mid = (low + high) / 2;if (array[mid] == key)return mid;if (array[mid] > key)high = mid - 1;elselow = mid + 1;}return 0;
}

折半查找的ASL需要画出折半查找判定树,将数1到11存储在数组进行折半查找所得判定树:

上图的画法:(1+11)/2=6; (1+5)/2=3; (7+11)/2=9;…
ASL(成功)=(1+2+2+3+3+3+3+4+4+4+4)/11=3
ASL(失败)=(3+3+3+3+4+4+4+4+4+4+4+4)/12=44/12=11/3(计算成功时的查找长度若比较4次,那么计算失败时只需比较3次)

顺序查找(c/c++)相关推荐

  1. python二分法查找算法_顺序查找算法和折半(二分法)查找算法,C语言查找算法详解...

    查找是指在大量的信息中寻找一个特定的信息.在计算机中,查找是非常重要的一个应用,比如"百度".查找算法的好坏直接影响查找的速度. 常用的查找算法主要有顺序查找和折半(二分法)查找: ...

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

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

  3. 【Java】 查找数组中指定元素之 顺序查找 与 二分查找

    今天博主分享两个查找数组中指定元素的算法:顺序查找与二分查找 小小目录 1.顺序查找 2. 二分查找 1.顺序查找 给定一个数组, 再给定一个元素, 找出该元素在数组中的位置. 代码如下: //顺序查 ...

  4. 常见的冒泡排序、顺序查找和对半查找

    关于一维数组的排序和查找 排序算法 冒泡排序 改进的冒泡排序 查找算法 顺序查找 对半查找 先看例题从键盘上任意输入8个整数,用冒泡排序法对8个数排序(由小到大) 从键盘上输入整数,利用for循环输入 ...

  5. 查找(包括顺序查找和折半查找)

    顺序查找 顺序查找又叫线性查找,主要用于线性表中的查找.顺序查找通常情况下分为对一般无序线性表的查找和对按关键字有序的顺序表的查找.下面进行比较讨论: 1.一般线性表的查找 作为一个直观的查找方法,其 ...

  6. 数据结构源码笔记(C语言):顺序查找

    //实现顺序查找的算法 #include<stdio.h> #include<malloc.h> #include<malloc.h>#define MAXL 10 ...

  7. hdu 2025:查找最大元素(水题,顺序查找)

    查找最大元素 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  8. python中顺序查找法例子_Python查找算法(一)------ 顺序查找

    查找算法  --  简介 查找(Searching)就是根据给定的某个值,在查找表中确定一个其关键字等于给定值的数据元素. 查找表(Search Table):由用一类型的数据元素构成的集合 关健字( ...

  9. 顺序查找的基本原理及实现

    原理:按照基本的顺序排序,简单地从一个项移动到另一项,知道找到目标项或遍历完整个列表,如果遍历完整个列表,则说明正在搜索的项不存在. 代码实现: 无序列表顺序查找 分析:最快1次找到,最差n次找到,平 ...

最新文章

  1. JWT(JSON Web Token)自动延长到期时间
  2. linux 查端口 三种,Linux查看端口常用的三种用例
  3. Halcon图像增强方法与原理概述
  4. 熊猫tv新功能介绍_熊猫简单介绍
  5. POJ 1088-滑雪
  6. 苦逼的是怎么又有东西没记住,但我们依然每天坚持一遍、一遍又一遍指导记住为止。
  7. HTML5-------元素使用
  8. http 500错误解决方案
  9. 数学建模(十)博弈论
  10. java 添加盲水印_图片加数字盲水印
  11. 谷歌浏览器任何页面崩溃解决方法
  12. 复旦大学邢晓渝:无监督句法分析模型里面的监督信号
  13. 扎克伯格引领的硅谷“裸捐”风
  14. 爬虫入门(三)——动态网页爬取:爬取pexel上的图片
  15. win8计算机可用内存不足,Win8.1频繁提示内存不足是怎么回事
  16. oracle忘记密码找回
  17. shiro框架基础--shiro框架概念及原理
  18. js随机生成验证码(数字+字母)
  19. UVALive 4950 Selling Land
  20. 如何执行代码走查活动才会有效呢

热门文章

  1. Tuple解决在视图中通过razor获取控制器传递给视图的匿名对象的报错问题
  2. 函数中{}输出格式详解(C#)
  3. C#三层ATM-11.查看交易信息
  4. 在 ASP.NET 2.0 中上载文件 —— 解决文件大小限制
  5. MapReduce提交作业常见问题
  6. 超级列表框排序mysql_超级列表框List Ctrl
  7. POJ2406简单KMP
  8. JavaScript原型与原型链(总结篇)
  9. 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 mobile-ffmpeg 框架 | 完整代码示例 )
  10. 【Android 逆向】ART 脱壳 ( 修改 /art/runtime/dex_file.cc#OpenCommon 系统源码进行脱壳 )