C语言 判断一个数是否是数组中的成员(用二分法查找)

本文介绍了一个简单的二分查找算法实现过程,通过一个已排序的数组进行查找操作,并返回目标值的位置或者找不到的信息。该算法利用了二分查找的原理,不断缩小查找范围,直至找到目标值或确定目标值不存在于数组中。

问题描述

已知数据a中一共有10个已排序的整数(由小到大排列)。现在从键盘上输入一个数,判断这个数是否是数组a中的数,如果是的话,打印出此数在数组a中的位置来,否则打印“找不到“。 (提示:①设待查找的数为x,设三个位置变量l、m、h分别代表查找范围的顶部、中间位置和底部,m=(l+h)/2,把数分成以a[m]为中点的两段范围。②判断x 是否等于a[m],若是,则找到。③若大于a[m],则x必在后半段范围,即在a[m+1]至a[h]。则舍弃前半段,再在后半段重新划分两段范围,定出l、m和h,重复以上步骤,逐步缩小查找范围。)

部分功能代码

#include<stdio.h> 
int search(int x);
int search(int x)
{
   
    int l=0,m,h=9,a[10]={1,2,3,4,5,6,7,8,9,10};
    m=(l+h)/2;
    .
    .
    .
    if(a[m]==x)
		return m+1;
	
	return -1;	
}
void main()
{
    while(1)
	{
		int x ;
		printf("请输入x: ");
		scanf("%d",&x);
        int pos = search(x);
        if(pos  == -1)
            printf("找不到\n");
        else
           printf("位置:%d\n",pos );
    }
    
}

运行结果

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值