C语言上班就找你是是是被抓

 

#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