用折半查找法查找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)。) 展开
(算法提示:用low和high分别表示查找范围的最小和最大下标。用mid代表中间元素的下标。只要查找范围是合理的(low<high),每次将中间元素a[mid]与key比较,如果相等则令标志性变量flag为1,代表已经找到了key;若小于key,则将查找范围缩小为右半区域(low=mid+1);否则为左半区域(high=mid+1)。) 展开
2个回答
展开全部
#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);
}
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);
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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);
}
{
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);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询