问题描述:设a[0:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,
返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
代码实现:
#include<iostream>
using namespace std;
int b[2] = { 0,0 };
template <typename Type>
int BinarySearch(Type a[], const Type x, int n)
{
int left = 0, right = n - 1;
int middle = 0;
while (left <= right)
{
middle = (left + right) / 2;
if (x == a[middle]) {
return middle; break;
}
if (x > a[middle]) {
left = middle + 1;
b[0] = middle - 1;
b[1] = middle;
}
else {
right = middle - 1;
b[0] =middle-1;
b[1] = middle ;
}
}
return -1;
}
int main()
{
int a[10] = { 0,1,3,4,5,6,7,8,9,10 };
int x = 2;
int n = 10;
int k=BinarySearch(a, x, n);
cout << k << endl;
cout << "i = " << b[0] << " : " << "j = " << b[1] << endl;
return 0;
}
运行结果: