新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
// 二分法查找算法
成都创新互联公司成都网站建设按需求定制开发,是成都网站维护公司,为塑料袋提供网站建设服务,有成熟的网站定制合作流程,提供网站定制设计服务:原型图制作、网站创意设计、前端HTML5制作、后台程序开发等。成都网站设计热线:028-86922220
int binary_search(int arr[],int *top,int *bot,int x){
if (*bot = *top){
int index= *top + (*bot - *top) / 2;
int *mid = index;
if (arr[*mid] == x) return *mid;
if (arr[*mid] x) { // x在左侧
*mid = *mid - 1;
return binary_search(arr, top, mid, x);
}
else{ // x在右侧
*mid = *mid+1;
return binary_search(arr, mid, bot, x);
}
}
return -1;
}
void main()
{
int a[10] = { 1, 3, 5, 7, 8, 9, 12, 13, 15, 17 };
int n = sizeof(a) / sizeof(a[0]), x = 13, t = 0;
int *top = t, *bot = n;
*bot = *bot - 1;
int index = binary_search(a, top, bot, x);
if (index = 0){
printf("%d在数组索引为[%d]的位置\n", x, index);
}
else{
printf("%d在数组中不存在!\n", x);
}
}
//参考代码如下:
#include stdio.h
int main()
{
int i, j, n, k=0, isFound=0;
int num[15] = {88,86,75,74,61,56,52,43,39,34,31,22,18,16,8}; //测试数组
printf("请输出一个整数:\n");
scanf("%d", n);
i = (int)15/2; //对折位移量
j = (int)15/2; //取数“指针”
while(k2)
{
i = (int)i/2;
if(i == 0) k++; //i==0 即折半到无可再折时,仍有最后一次比较,故以k做计数
//若未相等,计算下一循环指针的位置
if(nnum[j])
j = j + (i + 1);
else if(nnum[j])
j = j - (i + 1);
else
{
isFound = 1;
break; //若找到相等数,标记已找到并退出循环
}
}
//输出结果
if(isFound)
printf("该数是数组中第%d个元素的值\n", j);
else
printf("查无此数!\n");
return 0;
}
#includestdio.h
int find(int a[],int x,int n,int m)
{int i;
if(nm)return -1;
i=(n+m)/2;
if(a[i]==x)return i;
if(a[i]x)return find(a,x,n,i-1);
return find(a,x,i+1,m);
}
int main()
{
int a[20]={2,3,6,7,12,18,19,21,25,28,30,33,37,39,42,45,47,49,50,51};
int x,i;
printf("已有的数是:\n");
for(i=0;i20;i++)
printf("%d ",a[i]);
printf("\n请输入要查找的数:");
scanf("%d",x);
if((i=find(a,x,0,19))=0)
printf("%d是第%d个数\n",x,i+1);
else printf("未找到%d\n",x);
return 0;
}
#include stdio.h
int look_up(int a[],int n,int x)
{
int left=0,right=n-1,mid;
while(left=right)
{
mid=(left+right)/2;
if(x==a[mid])
return mid+1; //加一后才是它的逻辑位序
else if(xa[mid])
right=mid-1;
else
left=mid+1;
}
if(leftright)
return -1;
}
int main()
{
int a[100],n,x,i,result;
scanf("%d",n);
for(i=0;in-1;i++)
scanf("%d,",a[i]);
scanf("%d",a[i]);
scanf("%d",x);
result=look_up(a,n,x);
if(result=0)
printf("%d\n",result);
else
printf("No\n");
}
/*折半查找递归函数,如果查找成功,函数返回关键字所在位置,否则返回-1*/
/* s为有序数列,a、b分别为查找区间的起点和终点,key为查找关键字 */
int half(int s[],int a,int b,int key)
{
int mid;
if(a==b)
if(key==s[a]) return (a);
else return (-1);
else
{
mid=(a+b)/2;
if(keys[mid]) return(half(s,a,mid,key));
if(keys[mid]) return(half(s,mid+1,b,key));
if(key==s[mid]) return (mid);
}
}
这是折半查找的递归算法,应该是你说的意思!!