利用c++实现二分搜索算法的递归和非递归
时间: 2024-05-11 10:18:49 浏览: 93
下面是利用 C 语言实现二分搜索算法的递归和非递归版本的代码:
递归版本:
```c
int binarySearch(int arr[], int l, int r, int x) {
if (r >= l) {
int mid = l + (r - l) / 2;
// 如果元素正好是数组中间的元素
if (arr[mid] == x)
return mid;
// 如果元素小于中间元素,则在左子数组中
if (arr[mid] > x)
return binarySearch(arr, l, mid - 1, x);
// 否则在右子数组中
return binarySearch(arr, mid + 1, r, x);
}
// 如果没有找到元素,则返回 -1
return -1;
}
```
非递归版本:
```c
int binarySearch(int arr[], int l, int r, int x) {
while (l <= r) {
int mid = l + (r - l) / 2;
// 如果元素正好是数组中间的元素
if (arr[mid] == x)
return mid;
// 如果元素小于中间元素,则在左子数组中
if (arr[mid] > x)
r = mid - 1;
// 否则在右子数组中
else
l = mid + 1;
}
// 如果没有找到元素,则返回 -1
return -1;
}
```
这两个函数都接受一个整数数组 `arr`,数组的左右边界 `l` 和 `r`,以及要搜索的值 `x`。如果找到该元素,则返回其下标;否则返回 -1。
阅读全文