#include <stdio.h>
#define maxsize 100
typedef int KeyType;
typedef struct{
KeyType key;
}Searchl ;
int main()
{
Searchl r[maxsize];
int i,n,k,s,e,m;
scanf("%d", &n);
for(i=0;i<10;i++)
scanf("%d",&r[i].key);
scanf("%d",&k);
s=0,e=n-1;
while(s<n-1){
m=(s+e)/2;
if(r[m].key==k){
printf("%d",m);
break;
}
else if(r[m].key<k){
s=m+1;
e=n;
}
else{
s=0;
e=m-1;
}
}
}
/*10
1 2 3 4 5 6 7 8 9 10
3
*/
查找3输出下标2:
#include<stdio.h>
#define MAXSIZE 100
typedef int KeyType;
typedef struct
{
KeyType key;
}SearchL;
int BinSearch(SearchL *r,int len,int key) //折半查找法(二分法)
{
int low=0; //定义初始最小
int high=len-1; //定义初始最大
int mid; //定义中间值
while(low<=high)
{
//mid=(low+high)/2;//可能会溢出
mid=low+(high-low)/2; //找中间值
if(key==r[mid].key) //判断min与key是否相等
return mid;
else if(key>r[mid].key) //如果key>mid 则新区间为[mid+1,high]
low=mid+1;
else //如果key<mid 则新区间为[low,mid-1]
high=mid-1;
}
return -1; //如果数组中无目标值key,则返回 -1 ;
}
int main()
{
SearchL r[10];
for(int i=0;i<10;i++)
scanf("%d",&r[i].key);
int key;
scanf("%d",&key);
int pos = BinSearch(r,10,key);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps: 问答会员年卡【8折】购 ,限时加赠IT实体书,即可 享受50次 有问必答服务,了解详情>>>https://t.csdnimg.cn/RW5m