二分查找是将有序数列不断地缩小,直到找到改元素或折半区域的首元素位置高于尾元素位置为止。
//递归写二分查找
int BinarySearchD(int arr[], int x, int begin, int end)
{
if (begin <= end)
{
int mid = begin + ((end - begin) >> 1);
if (arr[mid] == x)
{
return mid;
}
else if (arr[mid] < x)
{
return BinarySearchD(arr, x, mid + 1, end);
}
else if (arr[mid] > x)
{
return BinarySearchD(arr, x, begin, mid - 1);
}
else
{
return -1;
}
}
}
//非递归二分查找
int BinarySearch(int arr[], int x,int begin,int end)
{
while (begin <= end)
{
int mid = begin + ((end - begin) >> 1);
if (arr[mid] == x)
{
return mid;
}
else if (arr[mid] < x)
{
begin = mid + 1;
}
else if (arr[mid]>x)
{
end = mid - 1;
}
else
{
return mid + 1;
}
}
return 1;
}