使用C语言编写:改写二分搜索算法,使得当搜索元素x不在数组中时,返回小于x的最大元素位置i和大于x的元素位置j。当搜索元素在数组中时,i和j相同,均为x在数组中的位置。
时间: 2023-03-30 10:04:55 浏览: 105
好的,这是一个关于算法的问题。对于这个问题,我可以回答。改写二分搜索算法,可以使用以下代码实现:
int binarySearch(int arr[], int l, int r, int x, int *i, int *j) {
if (r >= l) {
int mid = l + (r - l) / 2;
if (arr[mid] == x) {
*i = mid;
*j = mid;
return mid;
}
if (arr[mid] > x) {
if (mid > && arr[mid - 1] < x) {
*i = mid - 1;
*j = mid;
return -1;
}
return binarySearch(arr, l, mid - 1, x, i, j);
}
if (mid < r && arr[mid + 1] > x) {
*i = mid;
*j = mid + 1;
return -1;
}
return binarySearch(arr, mid + 1, r, x, i, j);
}
*i = r;
*j = l;
return -1;
}
这个函数的返回值为搜索到的元素的位置,如果元素不在数组中,则返回-1。同时,通过指针i和j返回小于x的最大元素位置和大于x的元素位置。
阅读全文