博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二分查找
阅读量:3936 次
发布时间:2019-05-23

本文共 1755 字,大约阅读时间需要 5 分钟。

本题要求实现二分查找算法。

函数接口定义:

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 
#include
#define MAXSIZE 10#define NotFound 0typedef 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 ){//函数BinarySearch要查找X在Data中的位置//即数组下标(注意:元素从下标1开始存储)	if(L->Last==0) return NotFound;	int mid;	int left,right;	left=1;	right=L->Last;	int flag=0;	while(1)	{		mid=(left+right)/2;		if(L->Data[mid]==X) return mid;		if(L->Data[mid]
Last) return NotFound; mid=(right+left)/2; }}

if(mid==1||mid==L->Last) return NotFound;

改为if(right<left) return NotFound;就对了
分析,比如 3 8 10 12 15 17
要查找的是11,则最后有left=right=4,(下标为4对应着12),12>11,则right=mid-1,为3,结束条件无用。
最终代码

Position BinarySearch( List L, ElementType X ){//函数BinarySearch要查找X在Data中的位置//即数组下标(注意:元素从下标1开始存储)	if(L->Last==0) return NotFound;	int mid;	int left,right;	left=1;	right=L->Last;	int flag=0;	while(left<=right)	{		mid=(left+right)/2;		if(L->Data[mid]==X) return mid;		if(L->Data[mid]

转载地址:http://klkwi.baihongyu.com/

你可能感兴趣的文章
undefined reference问题总结
查看>>
一个还不成熟的makefile工程
查看>>
linux下打印堆栈方法 锦集
查看>>
souce insight 3.5 修改背景颜色
查看>>
Linux 关闭/开启图形界面(X-window) 命令
查看>>
debug 打印 开关 设计(for c || C++)
查看>>
vmware中虚拟机和主机ping不通的问题。
查看>>
从“冷却时间”谈产品设计
查看>>
sscanf的特别用法(类似正则表达式)
查看>>
打印非字符串数组函数
查看>>
makefile中的if判断
查看>>
常用shell脚本
查看>>
将16进制文本转换为ascii码的C语言代码
查看>>
长网站 转换为 短网址 的原理
查看>>
基于http协议的C语言客户端代码
查看>>
我常用的makefile之产生优秀的.depend文件
查看>>
VMware无法识别USB设备的解决方法 以及 从虚拟机中断开USB设备,使其重新连接到windows主机上
查看>>
linux下C代码、C++代码和命令行方式,完成字符集编码的转换
查看>>
makefile中将变量向下传递
查看>>
shell中if做比较
查看>>