查找关键字符:二分(折半)查找法 (缩小区域)
前题:查找序列是有序(降/升序)
二分查找法思想(升序):
1、每次取序列中间元素进行比较
2、如果key>mid,说明查找值在中间元素的右侧,
如果key<mid,说明查找值在中间元素的左侧,
key==mid,说明查找成功
3、如果查找不成功,则再重复1,2步骤,直到查找成功或失败
程序实现:
#include<stdio.h>
void findkey(const int buf[],int left,int right,const int key)
{
int mid;
if(left>right)
{
printf("%d不存在\n",key);
return;
}
mid=(left+right)/2;
if(key==buf[mid])
{
printf("%d的下标为%d\n",key,mid);
return;
}
else if(key>buf[mid])
findkey(buf,mid+1,right,key);
else if(key<buf[mid])
findkey(buf,left,mid-1,key);
}
void main()
{
int buf[]={1,2,3,4,5,6,7,8,9,10,11};
findkey(buf,0,10,4);
}