折半查找

来源:互联网 发布:登陆facebook没网络 编辑:程序博客网 时间:2024/06/08 03:25

编写程序实现折半查找算法。
Description
第一行是查找表的长度n 
第二行是查找表中的数据元素 ; 
第三行是要查找的数据元素的关键字.
Input
查找成功返回位序,不成功返回-1 ,第二行为比较的次数。
Output
1
2
3
11
5 13 19 21 37 56 64 75 80 88 92
100
Sample Input
1
2
-1
4
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()函数没有返回值?数组我记得好像是不用专门的返回值的,直接写就可以了,不知道这次为什么可以。。

0 0
原创粉丝点击