折半查找
2015-06-11 08:45
267 查看
编写程序实现折半查找算法。
Description
第一行是查找表的长度n
第二行是查找表中的数据元素 ;
第三行是要查找的数据元素的关键字.
Input
查找成功返回位序,不成功返回-1 ,第二行为比较的次数。
Output
Sample Input
Sample Output
#include<stdio.h>
#include<stdlib.h>
int main()
{
void chek(int total);
int total;
while(scanf("%d",&total)!=EOF)
{
chek(total);
}
return 0;
}
void Input(int total,int *arr,int num)
{
int i;
for(i=0;i<total;i++)
scanf("%d",&arr[i]);
scanf("%d",&num);
}
void chek(int total)
{
//void Input(int total,int *arr,int num);
void cacu(int taotal,int *arr,int num);
int *arr,num;
arr=(int *)malloc(sizeof(int)*total);
//Input(total,arr,num);
int i;
for(i=0;i<total;i++)
scanf("%d",&arr[i]);
scanf("%d",&num);
cacu(total,arr,num);
free(arr);
}
void cacu(int total,int *arr,int num)
{
int low=0,heigh=total-1;
int mid;
int sum=0,flag=0;
while(low<=heigh)
{
sum++;
mid=(low+heigh)/2;
if(arr[mid]==num)
{
flag=1;
break;
}
else if(num>arr[mid])
low=mid+1;
else if(num<arr[mid])
heigh=mid-1;
}
if(flag==0)
printf("-1\n%d",sum);
else
printf("%d\n%d",mid,sum);
}
我如果用红色的部分写的话,在cacu()函数中,数组arr的值没有传进来,为什么?是不是因为Input()函数没有返回值?数组我记得好像是不用专门的返回值的,直接写就可以了,不知道这次为什么可以。。
Description
第一行是查找表的长度n
第二行是查找表中的数据元素 ;
第三行是要查找的数据元素的关键字.
Input
查找成功返回位序,不成功返回-1 ,第二行为比较的次数。
Output
1 2 3 | 11 5 13 19 21 37 56 64 75 80 88 92 100 |
1 2 | -1 4 |
#include<stdio.h>
#include<stdlib.h>
int main()
{
void chek(int total);
int total;
while(scanf("%d",&total)!=EOF)
{
chek(total);
}
return 0;
}
void Input(int total,int *arr,int num)
{
int i;
for(i=0;i<total;i++)
scanf("%d",&arr[i]);
scanf("%d",&num);
}
void chek(int total)
{
//void Input(int total,int *arr,int num);
void cacu(int taotal,int *arr,int num);
int *arr,num;
arr=(int *)malloc(sizeof(int)*total);
//Input(total,arr,num);
int i;
for(i=0;i<total;i++)
scanf("%d",&arr[i]);
scanf("%d",&num);
cacu(total,arr,num);
free(arr);
}
void cacu(int total,int *arr,int num)
{
int low=0,heigh=total-1;
int mid;
int sum=0,flag=0;
while(low<=heigh)
{
sum++;
mid=(low+heigh)/2;
if(arr[mid]==num)
{
flag=1;
break;
}
else if(num>arr[mid])
low=mid+1;
else if(num<arr[mid])
heigh=mid-1;
}
if(flag==0)
printf("-1\n%d",sum);
else
printf("%d\n%d",mid,sum);
}
我如果用红色的部分写的话,在cacu()函数中,数组arr的值没有传进来,为什么?是不是因为Input()函数没有返回值?数组我记得好像是不用专门的返回值的,直接写就可以了,不知道这次为什么可以。。
相关文章推荐
- Spring通过配置文件获取bean(不用IOC)
- Struts拦截器
- 远程桌面端口修改批处理
- php 页面参数过多时自动拼接get参数的函数
- Struts 2 学习笔记:Struts 2 中 Ajax 的使用方法
- C# 并行编程 之 ThreadPool的基本使用
- Tesseract-OCR 字符识别---样本训练
- 用c#开发微信 (16) 微活动 2 刮刮卡
- PHP整合PayPal支付
- 拓扑关系——九交模型
- Python 学习之一:在Mac OS X下基于Sublime Text搭建开发平台包含numpy,scipy
- Oracle Database 11g Express Edition 使用小结(windows)
- 深度学习笔记一:稀疏自编码器
- mtd-utils编译过程
- leetcode之Count Complete Tree Nodes
- BS程序如何通过浏览器了解点击响应时间
- 【WinRT】【译】【加工】在 XAML 中制作圆形图片
- 奔跑吧vivado
- php sortable 动态排序
- Maven中部署tomcat及maven构建的一些要点