代码:
//递归版本
int binarysearch(int arr[], int left, int right, int x)
{
if (NULL != arr&&left <= right)
{
int mid;
mid = (left + right) / 2;
if (arr[mid] = x)
return mid;
else if (arr[mid] > x)
return binarysearch(arr, left, mid - 1, x);
else
return binarysearch(arr, mid + 1, right, x);
}
return -1;
}
//非递归版本
int binarysearch(int arr[], int left, int right, int x)
{
if (NULL == arr || left > right)
return -1;
int mid;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] == x)
return mid;
else if (arr[mid] > x)
right = mid-1;
else
left = mid+1;
}
return -1;
}
举例子:
1、旋转数组中最小的数字(剑指offer)、循环有序数组中查找指定元素
2、数组中的元素有重复,要找出x首次出现的位置