递归方式
#include <stdio.h>
#include <string.h>
#define DATALEN 10
int Binary_Search(int *buf,int len,const int value)
{
int half;
half = len/2;
if(0==len)
{
printf("not have value %d\n",value);
return 0;
}
/*找到了值,并且打印返回*/
if(value==buf[half])
{
printf("search value is %d\n",value);
return 0;
}
else if(value>buf[half])
{
Binary_Search(&buf[half+1],half,value);
}
else
{
Binary_Search(&buf[0],half,value);
}
}
int main()
{
int i=0;
int buf[10];
printf("...............please input ten data...........\n");
for(i=0;i<DATALEN;i++)
{
scanf("%d",&buf[i]);
}
printf("the buf is: ");
for(i=0;i<DATALEN;i++)
{
printf("%d ",buf[i]);
}
printf("\n");
Binary_Search(buf,10,10);
return 0;
}
非递归方式
int Binary_Search(int *buf,int len,const int value)
{
int first=0;
int end = len-1;
int mid = end/2;
while(first<=end) //不断的分割,直到分割到最小为止
{
if(buf[mid]==value)
{
printf("找到了值:%d\n",value);
return 0;
}
else if(buf[mid]<value)
{
first = mid+1;
}
else
{
end = mid-1;
}
mid = (first+end)/2;
}
if(first>end)
{
/*分割完了,说明找不到那个值*/
printf("not have value %d\n",value);
return 0;
}
}