二分搜索问题:
设:a[0:n-1]是一个已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素的位置I和大于x的最小元素位置J。当搜索元素在数组中时,I和J相同,均为x在数组中的位置。
参考函数原型:bool BinarySearch(int a[], int n, int x, int& i, int& j);
#include<iostream>
using namespace std;
#include<stdio.h>
bool BinarySearch(int a[], int n, int x, int& i, int& j) {
int left = 0, mid, right = n - 1;
while (left <= right) {
mid = (left + right) / 2;
if (x == a[mid]) {
i = j = mid;
return true;
}
if (x > a[mid])
left = mid + 1;
else
right = mid - 1;
}
i = right;
j = left;
return false;
}
int main() {
int x, i, j;
int a[] = { 1,3,5,7,10,14,16,18,21,23,28 };
cout << "原始数据为:" << endl;
for (int i = 0; i < 11; i++) {
cout << a[i] << " ";
}
cout << endl &