您的位置:首页 > 其它

折半查找

2015-06-11 08:45 267 查看
编写程序实现折半查找算法。

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()函数没有返回值?数组我记得好像是不用专门的返回值的,直接写就可以了,不知道这次为什么可以。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: