用折半查找法查找key值。在数组元素已经递增排序的数组中,查找key,找到则打印对应的下标,否则打印-1。

(查找算法)用折半查找法查找key值。在数组元素已经递增排序的数组中,查找key,找到则打印对应的下标,否则打印-1。源程序保存为p6-5.c。(算法提示:用low和hi... (查找算法)用折半查找法查找key值。在数组元素已经递增排序的数组中,查找key,找到则打印对应的下标,否则打印-1。源程序保存为p6-5.c。
(算法提示:用low和high分别表示查找范围的最小和最大下标。用mid代表中间元素的下标。只要查找范围是合理的(low<high),每次将中间元素a[mid]与key比较,如果相等则令标志性变量flag为1,代表已经找到了key;若小于key,则将查找范围缩小为右半区域(low=mid+1);否则为左半区域(high=mid+1)。)
展开
 我来答
认了天荒
推荐于2016-05-22
知道答主
回答量:4
采纳率:0%
帮助的人:4.6万
展开全部
#include<stdio.h>

int binary(int a[ ], int n, int key);

int main(void)
{
int data[10] = {2, 5, 7, 13, 16, 18, 23, 26, 28, 35};
int pos=0, key;

printf("Input an integer to find:");
scanf("%d", &key);
/*********Found************/
pos = binary(data, 10, key);
if (pos == -1)
{
printf("Can't find %d.\n", key);
}
else
{
printf("%d's position is %d", key, pos);
}

return 0;
}

int binary(int a[ ], int n, int key)
{
int low, high, mid;

low = 0;
high = n - 1;
/*********Found************/
while (high>=low)
{
mid = (low + high) / 2;
if (key < a[mid])
{
high = mid - 1;
}
else if (key > a[mid])
{
low = mid + 1;
}
else
{
/*********Found************/
return(a[mid]); //改为return(key); 无语咯 蛋疼
}
}

return (-1);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Soucula
2013-04-08 · TA获得超过3091个赞
知道小有建树答主
回答量:744
采纳率:93%
帮助的人:73.6万
展开全部
int findkey(int array[], int low, int high, int key)
{
if (low > high)
return -1;
int mid = (low + high)/2;
if (array[mid] == key)
return mid;
else if (array[mid] < key)
return findkey(array,mid + 1,high, key);
else
return findkey(array,low,mid - 1, key);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式