int binaryFind(int* arr, int low, int high, int target) {
while (low <= high) {
int middle = (low + high) >> 1; //(low+high)/2
if (arr[middle] == target)
return middle;
//在右半边
else if (arr[middle] < target)
low = middle + 1;
//在左半边
else
high = middle - 1;
}
return -1;
}
int find(int* arr, int len, int target) {
int nextBegin = -1;
for (int i = 1; i < len; ++i) {
if (arr[i - 1] > arr[i]) { //找到分界点
nextBegin = i;
break;
} else if (arr[i] == target) { //找到分界点前找到目标
return i;
}
}
//后半部分使用二分查找
if (nextBegin != -1) {
return binaryFind(arr, nextBegin, len - 1, target);
}
return -1;
}