数组实验:有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。

折半查找法:
数组实验:有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。_第1张图片
low代表第一个元素的下标,mid代表中间元素的下标,high代表最后一个元素的下标,num为查找的数字
始终在low与high区间中找
若num小于mid,则high为mid-1,重新放置mid
若num大于mid,则low为mid+1,重新放置mid
直到找到num等于mid结束,若数组中不存在num,直到low<=high结束
只适用于有序的数组

#include 
int HalfSearch(int a[],int length,int num)
{
	int low=0;
	int high=length-1;
	int mid;
	while(low<=high)
	{
		mid=low+(high-low)/2;
		if(num==a[mid])
			return mid+1;//mid为数组括号中的数字,而题目中求的是第几个元素,故mid需加一
		else if(num>a[mid])
			low=mid+1;
		else high=mid-1;
	}
	return -1;
}
void main()
{
	int x,array[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15},result;
	printf("请输入想要查找的数:");
	scanf("%d",&x);
	result=HalfSearch(array,15,x);
	if(result==-1)
		printf("无此数\n");
	else printf("该数位于数组中第 %d 个元素\n",result);
}

数组实验:有15个数按由小到大顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值。如果该数不在数组中,则打印出“无此数”。_第2张图片
在这里插入图片描述

你可能感兴趣的:(C语言题目,c语言)