二分查找,递归实现
#include<stdio.h>
int a[10] = {0,1,2,3,4,5,6,7,8,9};
//head为查找的起始位置,Size为查找区间的大小,num为查找的值
int find(int *head, int Size, int num); //二分查找,递归版,返回0 or 1
int* Pfind(int *head, int Size, int num); //返回指针 or NULL
int main(void)
{
int i;
for(i = 0; i < 10; i++)
{
printf("find %d is %d \n", i, find(a,9,i));
}
for(i = 0; i < 10; i++)
{
int* p = Pfind(a,10,i);
if(NULL != p)
{
printf("%d\n", *p);
}
}
return 0;
}
int find(int *head, int Size, int num)
{
if(Size > 0)
{
int i = Size / 2;
if(head[i] == num)//查找 head+i
{
return 1;
}
else if(head[i] > num)
{
return find(head, i, num);//查找从head 到 head+i 的区间
}
else if(head[i] < num)
{
return find(head+i+1, Size-i-1, num); //查询剩余区间,head+i+1 到 head+i+1 + Size-i-1 = head+Size
}
}
return 0;
}
int* Pfind(int *head, int Size, int num)
{
if(Size > 0)
{
int i = Size / 2;
if(head[i] == num)
{
return (head+i);
}
else if(head[i] > num)
{
return Pfind(head, i, num);
}
else if(head[i] < num)
{
return Pfind(head+i+1, Size-i-1, num); //查询剩余区间
}
}
return NULL;
}