判断一个数是否是数组中的成员(用二分法查找) 已知数据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,重复以上步骤,逐步缩小查找范围。)
首先明确一点,题目中的数据a是已知条件,不需要因考虑复用性然后进行数组的输入及排序。而后在判断的时候这里采用布尔值的形式。其次,提示内容就是二分法所表达的内容,也就是search子函数的主体while循环的内容.

#include<stdlib.h>
#include<stdio.h>
#define i 10
int search(int *a,int s,int k)
{
    
    
	int l = 0;
	int h = s-l;
	while(l<=h)
	{
    
    
		int m = (l+h)/2;
		if(k==a[m])
		{
    
    
			return m;
		}
		else
		{
    
    
			if(k<a[m])
			h=m-1;
			else
			l=m+1;
		}
	}
	return 1; 
 } 
 int main()
 {
    
    
 	int index,key,a[i]={
    
    2,4,6,8,10,12,14,16,18,20};
 	printf("请输入你想找的数:");
 	scanf("%d",&key);
 	index = search(a,i,key);
 	if(index!=1)
 	printf("%d在数组中的位置是%d\n",key,index);
 	else
 	printf("没找到\n"); 
 }

对我的博客或其他方面有任何见解或问题的话都可以私信我
或者联系本人QQ:3128909688
微信:DreamHerome
欢迎致电

猜你喜欢

转载自blog.csdn.net/RViewSonic/article/details/108023441