折半查找法:
low代表第一个元素的下标,mid代表中间元素的下标,high代表最后一个元素的下标,num为查找的数字
始终在low与high区间中找
若num小于mid,则high为mid-1,重新放置mid
若num大于mid,则low为mid+1,重新放置mid
直到找到num等于mid结束,若数组中不存在num,直到low<=high结束
只适用于有序的数组
#include <stdio.h>
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);
}