查找算法复习——线性表的查找
来源:互联网 发布:sql 安装错误sku 编辑:程序博客网 时间:2024/05/13 06:20
在复习数据结构的时候,我对查找也算学得比较好的,但是今天复习这块知识的时候,发现是那么的陌生,不知道是用的少,还是什么原因,这个时候,要是我当时能够写博客把那些东西总结一下,是不是效果会好些的,所以我要坚持写博客。
查找分为两类——比较式的查找和计算式的查找。比较式的查找又分为线性查找法和基于树的查找法;而计算式的查找法就是哈希查找了。
线性表的查找:
1)顺序查找法。对于这种查找,就是一个一个挨着比较,如果找到了就成功,否则是失败的,再次不多说。
2)折半查找法。也是二分搜索,它主要用的是分治法思想进行设计的。
问题描述:给定已经从小到大排好序的n个元素a[0]——a[n-1],现在要在这n个元素当中找到一个特定的元素x。
算法分析:首先取a[n/2]与x比较,如果x==a[n/2],则找到x,算法终止;如果xa[n/2],则在后半部分进行查找。
具体程序实现:
- /*binsearch_recursion.c*/
- #include <stdio.h>
- #define N 10
- int binsearch(int left, int right, int x, int *a)
- {
- int mid = (left+right)/2;
- int result;
- if(left > right) {
- result = -1;
- return result;
- }
- if(x == a[mid]) {
- result = mid;
- } else if(x < a[mid]) {
- result = binsearch(left, mid-1, x, a);
- } else {
- result = binsearch(mid+1, right, x, a);
- }
- return result;
- }
- int main()
- {
- int a[N] = {12, 18, 23, 87, 98, 100, 120, 130, 155, 198};
- int x = 195, result;
-
- result = binsearch(0, N-1, x, a);
- if(result == -1) {
- printf("not found\n");
- return 0;
- }
- printf("The result is:a[%d]=%d\n", result, a[result]);
- return 0;
- }
这种实现是递归形式的,如果把它改为非递归形式如下:
- /*binsearch.c*/
- #include <stdio.h>
- #define N 10
- int binsearch(int left, int right, int x, int *a)
- {
- int result, mid;
- while(left <= right) {
- mid = (left+right)/2;
- if(x == a[mid]) {
- result = mid;
- break;
- } else if(x > a[mid]) {
- left = mid+1;
- } else {
- right = mid-1;
- }
- }
- if(left > right) {
- result = -1;
- }
- return result;
- }
- int main()
- {
- int a[N] = {12, 18, 23, 87, 98, 100, 120, 130, 155, 198};
- int x = 195, result;
-
- result = binsearch(0, N-1, x, a);
- if(result == -1) {
- printf("not found\n");
- return 0;
- }
- printf("The result is:a[%d]=%d\n", result, a[result]);
- return 0;
- }
3)分块查找法。对于这个查找算法我只是了解了思想:把表分成若干个块,之后建立一张索引表,这个索引表中的每一项记录每一块的最大元素值和每一块开始的下表。查找的时候,首先在索引表中根据折半查找或者顺序查找找到所对应的那个块,然后针对那一块进行查找。
0
上一篇:巧记const, char, *的区别
下一篇:查找算法复习——二叉排序树
相关热门文章
- test123
- 编写安全代码——小心有符号数...
- 彻底搞定C语言指针详解-完整版...
- 使用openssl api进行加密解密...
- 一段自己打印自己的c程序...
- linux dhcp peizhi roc
- 关于Unix文件的软链接
- 求教这个命令什么意思,我是新...
- sed -e "/grep/d" 是什么意思...
- 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
LoveJJ_20112011-10-10 10:11:18
多谢了,我也是刚刚在准备复习一下,整理的思路很好
回复 | 举报
评论热议
0 0
- 查找算法复习——线性表的查找
- 查找——线性表的查找
- 算法-线性表的查找
- 查找——线性表顺序查找算法
- 算法-查找-线性表的查找(顺序查找,二分查找,分块查找)
- 算法-->线性表查找
- 查找——线性表的折半法查找
- 查找----线性表的查找
- 查找算法复习——二叉排序树
- c查找算法——线性索引查找
- 查找算法之线性表查找
- 线性表的查找
- Java查找算法--线性查找
- 第十三周——项目一—验证算法(1)线性表的折半查找
- 线性表的查找-顺序查找
- 线性表的查找-二分查找
- 线性表的查找-分块查找
- 查找一 线性表的查找
- Android okHttp网络请求之Retrofit+Okhttp+RxJava组合
- 总结SSH阶段常见的异常系列之一hibernate
- TCP详解
- Arena777 Casino Malaysia Baccarat Triple Bonus(arena777, arena777 casino malaysia, arena777 existing
- ASP.NET Core 操作数据库提示“Microsoft.EntityFrameworkCore.DbUpdateException”
- 查找算法复习——线性表的查找
- android教你打造独一无二的刷新加载框架
- 用variance和bias解释其overfitting
- 查找算法复习——二叉排序树
- 海量数据处理算法设计
- 离散-洛谷P2205 [USACO13JAN]画栅栏Painting the Fence
- maven pom文件详解
- 拆分一个数组的奇偶数
- 表格表头行列与表身不对齐
原创粉丝点击
热门IT博客
热门问题
老师的惩罚
人脸识别
我在镇武司摸鱼那些年
重生之率土为王
我在大康的咸鱼生活
盘龙之生命进化
天生仙种
凡人之先天五行
春回大明朝
姑娘不必设防,我是瞎子
冻酸奶雪糕
手工酸奶
酸奶机器
冻酸奶怎么做
酸奶冻了还能喝吗
冻酸奶热量
南瓜酸奶冻
奶爆
鲜奶吧利润
香蕉冻了还能吃吗
榨香蕉
冻胚和鲜胚哪个成功率比较高
试管移植鲜胚好还是冻胚好
鲜胚和冻胚哪个成功率高
试管鲜胚和冻胚哪个成功率高
冻鸡爪
冻鸡爪批发价格
冼东妹
冼夫人庙
冼头掉头发是怎么回事
熬生姜水冼头冶脱发吗
冼脚按摩盆什么牌子好
不锈钢冼菜盆
冼手盆
安装洗手盆
陶瓷洗手盆图片
瓷洗手盆
冼星海
冼星海简介
冼星海的作品
冼星海作品
冼星海读音
冼车机价格图片洗车
自助冼车机多少钱一台
冼车机
冼灏英
洗碗机排名
冼碗机
洗碗机测评
好的洗碗机
洗碗机清洗