请改写二分搜索算法,设a[0:n-1]是已排好序的数组。请改写二分搜索算法,使得当搜索元素x不在数组中时,返回false,参数返回小于x的最大元素位置i和大于x的最小元素位置j。当搜索元素x在数组中时
时间: 2023-04-20 18:03:15 浏览: 182
,返回true和元素在数组中的位置。
改写后的二分搜索算法如下:
```
bool binarySearch(int a[], int n, int x, int& i, int& j) {
int left = 0, right = n - 1;
bool found = false;
while (left <= right) {
int mid = (left + right) / 2;
if (a[mid] == x) {
i = j = mid;
found = true;
break;
} else if (a[mid] < x) {
i = mid;
left = mid + 1;
} else {
j = mid;
right = mid - 1;
}
}
if (!found) {
if (i == -1) i = 0;
if (j == -1) j = n - 1;
}
return found;
}
```
当搜索元素x不在数组中时,返回false,并将小于x的最大元素位置i和大于x的最小元素位置j存入参数中。如果i或j没有被赋值,则表示没有小于x或大于x的元素,此时将i或j赋值为数组的第一个或最后一个元素的下标。
当搜索元素x在数组中时,返回true,并将元素在数组中的位置存入参数i和j中,此时i和j相等。
阅读全文