代碼:
//遞歸版本
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首次出現的位置