当前位置:网站首页>6-10 二分查找(20分)
6-10 二分查找(20分)
2022-08-10 17:54:00 【jie3606】
本题要求实现二分查找算法。
函数接口定义:
Position BinarySearch( List L, ElementType X );
其中List结构定义如下:
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
L
是用户传入的一个线性表,其中ElementType
元素可以通过>、==、<
进行比较,并且题目保证传入的数据是递增有序的。函数BinarySearch
要查找X在Data
中的位置,即数组下标(注意:元素从下标1开始存储
)。找到则返回下标,否则返回一个特殊的失败标记NotFound
。
裁判测试程序样例:
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
List ReadInput(); /* 裁判实现,细节不表。元素从下标1开始存储 */
Position BinarySearch( List L, ElementType X );
int main()
{
List L;
ElementType X;
Position P;
L = ReadInput();
scanf("%d", &X);
P = BinarySearch( L, X );
printf("%d\n", P);
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例1:
5
12 31 55 89 101
31
输出样例1:
2
输入样例2:
3
26 78 233
31
输出样例2:
0
解答
Position BinarySearch( List L, ElementType X ){
int i = 1,j = L->Last;
while(i<=j){
int mid = (i+j)/2;
if(L->Data[mid]<X) i = mid + 1;
else if(L->Data[mid] > X) j = mid - 1;
else return mid;
}
return NotFound;
}
完整的代码
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 10
#define NotFound 0
typedef int ElementType;
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
List ReadInput(); /* 裁判实现,细节不表。元素从下标1开始存储 */
Position BinarySearch( List L, ElementType X );
int main()
{
List L;
ElementType X;
Position P;
L = ReadInput();
scanf("%d", &X);
P = BinarySearch( L, X );
printf("%d\n", P);
return 0;
}
List ReadInput(){
List list = (List) malloc(sizeof (struct LNode));
int N = 0;
scanf("%d",&N);
list->Last = N;
for(int i = 1;i<=N;i++){
scanf("%d",&(list->Data[i]));
}
return list;
}
Position BinarySearch( List L, ElementType X ){
int i = 1,j = L->Last;
while(i<=j){
int mid = (i+j)/2;
if(L->Data[mid]<X) i = mid + 1;
else if(L->Data[mid] > X) j = mid - 1;
else return mid;
}
return NotFound;
}
边栏推荐
- Go 语言快速入门指南:第四篇 与数据为舞之数组
- 多线程与高并发(11)——经典面试题之实现一个容器,提供两个方法,add,size。
- WebRTC source code analysis nack detailed explanation
- pip安装时 fatal error C1083 无法打开包括文件 “io.h” No such file or directory
- 6月各手机银行活跃用户较快增长,创半年新高
- FFmpeg Huaping solution (modify source code, discard incomplete frames)
- D-Wave成功上市!量子计算商业化正在加速
- R语言使用ggpubr包的ggbarplot函数可视化柱状图、设置add参数为mean_se和jitter可视化不同水平均值的柱状图并为柱状图添加误差线(se标准误差)和抖动数据点分布
- 【ARK UI】HarmonyOS ETS的引导页的实现
- 一小时搞定 简单VBA编程 Excel宏编程快速扫盲
猜你喜欢
随机推荐
不能直接在交易所期货开户
【图像去雾】基于颜色衰减先验的图像去雾附matlab代码
AVFrame related api memory management
WebRTC源码分析 nack详解
AVFrame相关api内存管理
FFmpeg 从mp4上提取H264的nalu
本周四晚19:00知识赋能第六期第5课丨OpenHarmony WiFi子系统
oracle11g体系结构
【快应用】实现自定义导航栏组件
R语言patchwork包将多个可视化结果组合起来、plot_annotation函数以及tag_level参数将组合图用大写字母进行顺序编码、为组合图的标签添加自定义后缀信息(suffix)
Word里表格跨页时自动断开,表格后留有空白部分,未布满整页,如何操作让表格上下页均匀布满?
FFmpeg花屏解决(修改源码,丢弃不完整帧)
迪文发布新款2K高清DGUS智能屏
文件包含漏洞复习总结
【数据存储精讲】整型和浮点型有什么区别?为什么会精度丢失?
Toronto Research Chemicals萜烯分析丨(+)-柠檬烯
CDH6.3.2之Kerberos安全认证_大数据培训
破解校园数字安全难点,联想推出智慧教育安全体系
Toronto Research Chemicals霉菌毒素分析丨T2 四醇
微服务架构-实现技术之六大基础组件:服务通信+事件驱动+负载均衡+服务路由+API网关+配置管理