两种实现方法:
1、利用循环直接找
2、利用递归思想
#include<iostream>
using namespace std;
#define num 15
void print(int* arr, int len);
int half_find(int* arr, int len, int findData);
int half_find(int* arr, int l, int r, int findData);
int main()
{
int arr[num];
for (int i = 0; i < num; i++)
{
arr[i] = i*3+8;
}
int idx = half_find(arr, 15, 6);
cout << "idx:"<<idx<<arr[idx] << endl;
//print(arr, num);
system("pause");
return 0;
}
void print(int* arr, int len)
{
for (int i = 0; i < len; i++)
{
cout << arr[i] << endl;
}
}
int half_find(int* arr, int len, int findData)
{
return half_find(arr, 0, len - 1, findData);
}
int half_find(int* arr, int l, int r, int findData)
{
//循环找
int mid ;
int left = l;
int right = r;
while (1)
{
mid = left + (right - l) / 2;
if (findData == arr[mid])
{
return mid;
}
if (findData > arr[mid])
{
left = mid+1;
}
if (findData < arr[mid])
{
right = mid;
}
if (left == right)
{
return -1;
}
//break;
}
//return -1;
//递归
/*int mid = l + (r - l) / 2;
if (l = r)
{
return -1;
}
if (findData == arr[mid])
{
return mid;
}
if (findData > arr[mid])
{
return half_find(arr, mid + 1, r, findData);
}
if (findData < arr[mid])
{
return half_find(arr, l, mid, findData);
}*/
}