#include <stdio.h>
//二分查找 升序数组
//data: 查找的目标
//arr : 数组
//start: 开始下标
//end : 结束下标
//返回值: -1 没找到 >= 0 找到数的下标
int find(int data ,int *arr, int start, int end)
{
if(start > end)
{//没找到
return -1;
}
else
{
//方式1
//找中间位置下标
int i = (start + end) / 2;
//刚好命中
if(arr[i] == data) return i;
//在前面部分
if( arr[i] > data )
return find(data, arr, start, i-1);
else //在后边部分
return find(data,arr, i+1, end);
}
}
//二分查找方式2
//data:要找的数
//arr :数组
//len :数组长度
//返回值: NULL没有找到 非空找到目标的地址
int * find2(int data, int *arr, int len)
{
if(len <= 0) return NULL;
int * p = arr + len / 2;
if(*p == data) return p;
if(*p > data) return find2(data,arr, p - arr );
else return find2(data, p+1, len - (p-arr)-1 );
}
int main()
{
int arr[]={1,2,5,7,9,11,17,20,30,55,97};
//int ret = find(20,arr,0,10);
//printf("ret= %d\n",ret);
int *p = find2(10,arr,11);
if(p)
printf("找到了下标=%ld\n",p-arr);
else
printf("没有找到!\n");
return 0;
}