数组_例题:折半查找法

/*
折半查找法!
*/
# include <stdio.h>
# define N 10

int main(void)
{
int i, num;
int data[] = {13,15,23,29,30,31,38,45,56,69}; //在数组中存放10个整数;
int low=0, high=N-1, mid;//定义数组中最低、最高及中间元素;

printf("Please input a num:\n");
scanf("%d", &num); //输入查找的数字;

for(i=0; i<N; ++i)
{
if(i%5 == 0 && i!=0)
printf("\n"); //每显示5行换行,以排列整齐;
printf("data[%d]=%d ", i, data[i]); //输出赋值好的数组内的所有元素;
mid = (low+high)/2;//计算出中间值;
}
while(low<=high)
{
mid = (low+high)/2;//计算中间值,第一次为(0+9)/2=4,data[4]为第五个数字30;
if(num == data[mid])
{
printf("\nFind %d, It is data[%d]!", num, mid);
break;
}
else if(num > data[mid])
low = mid+1; //注意:是mid+1而非low+1;
else
high = mid-1;


}
if(low>high) //无该数字,查找失败。
printf("\n%d is not in data[]", num);
printf("\nlow = %d, high = %d", low, high);
putchar('\n');

return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值