顺序查找(监视哨)、折半查找
时间:2019-11-21
本文章向大家介绍顺序查找(监视哨)、折半查找,主要包括顺序查找(监视哨)、折半查找使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
顺序查找
不带监视哨
int Search_Seq_1(SSTable S,ElemType key)
{
for(int i=0;i<S.length;i++)
{
if(S.elem[i]==key)
return i;
}
return -1;
}
带监视哨
int Search_Seq_2(SSTable S,ElemType key)
{
S.elem[0]=key;
int i=S.length-1;
while(S.elem[i]!=key)
{
i--;
}
return i;
}
不带监视哨的写法中,没循环一次都要判断两个条件1、i<S.length 2、S.elem[i]==key;而带监视哨的写法没循环一次仅要判断S.elem[i]!=key即可,当元素个数大于1000时,程序运行时间可几乎减少一半;
折半查找
折半查找仅适用于对有序表的查找; 查找原理是附设三个指针,low,high,mid;初始化分别执行表头、表尾、表的中间元素,当查找元素key等于mid所指的时,即查找成功,当所指元素小于它时,说明key在【low,mid】的区间内,此时令high=mid-1,mid=(low+high)/2;相反当大于时,low=mid+1,mid=(low+high)/2,直到查找成功;
int Search_Bin(SSTable S,ElemType key)
{
int low=0,high=S.length-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(S.elem[mid]==key)
{
return mid;
}
else if(key<S.elem[mid])
high=mid-1;
else
low=mid+1;
}
return -1;
}
完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#define MAXSIZE 100 //查找表的最大存储容量
typedef char ElemType;
//顺序查找表的顺序存储结构
typedef struct
{
ElemType *elem;
int length;
}SSTable;
//查找表初始化
void Init_SSTable(SSTable *S)
{
S->elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));
S->length=0;
}
//向查找表输入元素
void Input_SSTable(SSTable *S)
{
char ch;
ElemType e;
while(1)
{
scanf("%c",&e);
S->elem[S->length++]=e;
if((ch=getchar())=='\n')
break;
}
}
//打印查找表元素
void Show_SSTable(SSTable S)
{
for(int i=0;i<S.length;i++)
{
printf("%c ",S.elem[i]);
}
}
//顺序查找(无监视哨的写法)
int Search_Seq_1(SSTable S,ElemType key)
{
for(int i=0;i<S.length;i++)
{
if(S.elem[i]==key)
return i;
}
return -1;
}
//顺序查找(带监视哨的写法)
int Search_Seq_2(SSTable S,ElemType key)
{
S.elem[0]=key;
int i=S.length-1;
while(S.elem[i]!=key)
{
i--;
}
return i;
}
//折半查找
int Search_Bin(SSTable S,ElemType key)
{
int low=0,high=S.length-1,mid;
while(low<=high)
{
mid=(low+high)/2;
if(S.elem[mid]==key)
{
return mid;
}
else if(key<S.elem[mid])
high=mid-1;
else
low=mid+1;
}
return -1;
}
int main()
{
SSTable S,*p;p=&S;
Init_SSTable(p);
Input_SSTable(p);
Show_SSTable(S);
int result;
result=Search_Seq_1(S, '4');
printf("\n%d\n",result);
result=Search_Seq_2(S, '4');
printf("%d\n",result);
result=Search_Bin(S, '4');
printf("%d\n",result);
return 0;
}
/* 测试
0 1 2 3 4 5 6
0 1 2 3 4 5 6
4
4
4
Program ended with exit code: 0
*/
原文地址:https://www.cnblogs.com/zhulmz/p/11907577.html
- 无法取得ConnectionSettings的问题
- DataTable,List去重复记录的方法
- Uploadify的一点总结
- 自动驾驶时代,中国移动要以怎样的姿势进入?
- JQuery中文日期控件
- Silverlight中的帧
- 窗口自动弹出浏览器显示广告的问题
- Instagram 开源用于 Python 3的MonkeyType 工具
- 拼凑了几个自定义的Panel(包括FishEyePanel,WrapPanel等几个常用的布局)
- jquery获取父级一级节点的序号
- Docker容器学习梳理--基础知识(2)
- Blend生成的TransformGroup如何引用?
- 今日头条写新闻机器人获吴文俊人工智能科技发明奖
- Docker容器学习梳理--应用程序容器环境部署
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 那些Vue开发遇到的坑---响应式系统
- 基于Ansible和Devops的一键测试环境部署实践
- STM32硬核DIY机械键盘|蓝牙USB双模|灯控
- R语言隐马尔可夫模型HMM识别不断变化的股票市场条件
- 看完这篇并发后,又能扯皮了?
- Twitter美国航空公司情绪数据集的监督或半监督ULMFit模型
- 一文帮你理解整个 SRE 运维体系!
- 拆解式解读如何用飞桨复现胶囊神经网络(Capsule Network)
- 我用飞桨Parakeet合成小姐姐声音帮我“读”论文
- 【5分钟玩转Lighthouse】搭建WordPress博客
- vue接入腾讯地图(一)【点击事件】
- Redis文件事件&时间事件处理机制
- Redis持久化策略
- Redis二进制安全的原理
- 面试必备 Vue 知识点