C语言习题 折半查找
来源:互联网 发布:手机淘宝上怎么开店 编辑:程序博客网 时间:2024/06/05 06:13
2413: C语言习题 折半查找
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 1829 Solved: 687
[Submit][Status][Web Board]
Description
有n个数(n<20),已按从大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的第几个元素的值。如果不在数组中输出0。
要求: 编写两个函数input和binbearch分别实现数组数据的输入和元素的查找。
Input
第一行数组元素的个数n
第二行n个数组元素的值
第三行要查找的值
Output
查找的值在数组中的位置
Sample Input
1010 9 8 7 6 5 4 3 2 15
Sample Output
6
HINT
主函数已给定如下,提交时不需要包含下述主函数
/* C代码 */
int main()
{
int a[20],n=0,value;
int position;
scanf("%d",&n);
input(a,n);
scanf("%d",&value);
position =binsearch(a,n,value);
printf("%d",position);
return 0;
}
/* C++代码 */
int main()
{
int a[20],n=0,value;
int position;
cin>>n;
input(a,n);
cin>>value;
position =binsearch(a,n,value);
cout<<position;
return 0;
}
AC代码:
#include <stdio.h>#include <stdlib.h>void input(int *a,int n){ int i; for(i=1; i<=n; i++) scanf("%d",a+i);}int binsearch(int *a,int n,int value){ int p=1,q=n,t; t=(p+q)/2; while(p<=q) { if(*(a+t)==value) { break; } if(value<*(a+t)) p=t+1; else q=t-1; t=(p+q)/2; } return t;}
一般二分查找:
#include <stdio.h>#include <stdlib.h>void input(int a[],int n){ int i; for(i=0;i<n;i++) scanf("%d",&a[i]);}int binsearch(int a[],int n,int value){ //在有序表R[0..n-1]中进行二分查找,成功时返回结点的位置,失败时返回-1 int low=0,high=n-1,mid; //置当前查找区间上、下界的初值 while(low<=high) { if(a[low]==value) return low+1; if(a[high]==value) return high+1; //当前查找区间R[low..high]非空 mid=low+((high-low)/2); /*使用(low+high)/2会有整数溢出的问题 (问题会出现在当low+high的结果大于表达式结果类型所能表示的最大值时, 这样,产生溢出后再/2是不会产生正确结果的,而low+((high-low)/2) 不存在这个问题*/ if(a[mid]==value) return mid+1; //查找成功返回 if(a[mid]<value) low=mid+1; //继续在R[mid+1..high]中查找 else high=mid-1; //继续在R[low..mid-1]中查找 } if(low>high) return -1;//当low>high时表示所查找区间内没有结果,查找失败}
阅读全文
0 0
- C语言习题折半查找
- C语言习题 折半查找
- C语言习题 折半查找
- C语言习题 折半查找
- 2413: C语言习题 折半查找
- oj2413:C语言习题 折半查找
- C++语言习题 折半查找
- C语言 -- 折半查找
- C语言 折半查找
- C语言 折半查找
- 【C语言】折半查找。
- 折半查找(c语言)
- 【C语言】 折半查找
- C语言:折半查找
- 【C语言】折半查找
- C语言折半查找
- C语言折半查找法
- C语言折半查找DEMO
- 1.HTML5文件的基本结构
- CE 自带Tutorial -第9关
- 在 maven中用SOA结构下用mybatis 逆向工程生成代码 运行后控制台只显示 retrieving column informaction for table
- 结构体中字符数组赋值字符串问题
- 详解JavaScript中数组的reduce方法
- C语言习题 折半查找
- 阿里巴巴云连接池durid数据库密码加密
- Servlet学习笔记1
- Mysql索引类别
- 实现简易数据连接池
- 注解映射器和适配器(6)
- TensorBoard Graph
- 文章标题
- Python 3 爬虫的自我探索(三)