c语言编程二分查找

给定已经排好序的n个元素,现在要在这n个元素中找出一特定元素x。顺序搜索的方法是逐个比较,直至找出元素。二分搜索则利用了元素间的次序关系,可大大提高效率。二分法的基本思想... 给定已经排好序的n个元素,现在要在这n个元素中找出一特定元素x。顺序搜索的方法是逐个比较,直至找出元素。二分搜索则利用了元素间的次序关系,可大大提高效率。二分法的基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x作比较。如果x==a[n/2],则终止。如果x<a[n/2],则只需在数组的左半部分继续搜索。如果x>a[n/2],则只需在右半部分搜索。本题要求利用上一题得到的数组进行顺序查找和二分查找,分别为两种查找方法计时 展开
 我来答
damengjohn
2006-12-19 · 超过10用户采纳过TA的回答
知道答主
回答量:27
采纳率:0%
帮助的人:33.8万
展开全部
好久不写了

写一个程序,建立N元整型数组,然后输入查找的整数x,查找x是否包含在数组中,查找用函数实现,若查找成功,返回x在数组中的第一次出现的下标,查找失败,返回-1

源程序:
#include"stdio.h"
#define N 10
int locate(int a[N],int x)
{int h,r,m;
h=0;r=N-1;m=(h+r)/2;
while(h<=r&&x!=a[m])
if(x<a[m]) {r=m-1;m=(h+r)/2;}
else {h=m+1;m=(h+r)/2;}
if(h>r) return -1; /*查找失败,返回-1*/
return m; /*查找成功,返回有效下标m */
}
void upinsert(int a[],int i) /*插入排序 (升序)*/
{int x,j;
x=a[i];j=i-1;
while(j>=0&&a[j]>x) {a[j+1]=a[j];j--;}
a[j+1]=x;
}
void main()
{int a[N],x,k,n;
printf("input %d integers:\n",N);
for(k=0;k<N;k++) {scanf("%d",a+k);upinsert(a,k);}
printf("input x=") ;scanf("%d",&x);
n=locate(a,x);
for(k=0;k<N;k++) printf("%4d",a[k]);
printf("\n fist position=%d\n",n);
}

没有错误,我试过了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式