C语言基础:折半查找

  • Post author:
  • Post category:其他



输入一组(10个数)从小到大有序且不重复的整数,用折半查找法在其中查找x,若x存在,输 出该数在数组中的下标,若找不到x,显示“no”


输入包括两行数据: 第一行:包括10个int类型整数,用空格间隔,系统保证其从小到大有序且不重复(即你不需要判断该组数据是否有序且不重复); 第二行:输入待查找的int型整数x

输入样例:

1 2 3 4 5 6 7 8 9 10

5

输出样例:

4

#include<stdio.h>
int main(){
	int a[10],i,left=0,mid,x,right,flag;//mid为标值
	for(i=0;i<10;i++)
		scanf("%d",&a[i]);
	left=0;right=9;flag=0;//将数据左右定义为下标
	scanf("%d",&x);
	if(x>=a[left]&&x<=a[right])//判断输入数据是否在a内
	{	while(!flag&&left<=right)//循环不断折半靠近x,flag==0时为未找到
		{	mid=(left+right)/2;//mid为数组的中点
			if(a[mid]==x)flag=1;//找到
			else if(x>a[mid])left=mid+1;//x位于中点的右边
			else right=mid-1;//位于左边
		}
	}
	if(flag==1)printf("%d",mid);
	else printf("no");
	return 0;
}



版权声明:本文为qq_39618581原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。