利用C++,不用类函数编程实现折半查找的非递归算法
时间: 2023-06-25 18:05:51 浏览: 118
折半查找(二分查找)是一种在有序数组中查找特定元素的算法,非递归实现可以用循环语句来完成。以下是用 C++ 实现折半查找的非递归算法的示例代码:
```cpp
#include <iostream>
using namespace std;
int binarySearch(int arr[], int n, int x) {
int left = 0, right = n-1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == x)
return mid;
else if (arr[mid] < x)
left = mid + 1;
else
right = mid - 1;
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int n = sizeof(arr)/sizeof(arr[0]);
int x = 5;
int result = binarySearch(arr, n, x);
if (result == -1)
cout << "Element not found" << endl;
else
cout << "Element found at index " << result << endl;
return 0;
}
```
在上面的代码中,`binarySearch` 函数接收一个有序数组 `arr`,数组的长度 `n` 和要查找的元素 `x`,并返回 `x` 在数组中的下标,如果 `x` 不在数组中,则返回 `-1`。函数中使用了两个指针 `left` 和 `right`,分别指向数组的左右两端。在循环中,计算中间元素的下标 `mid`,并将其与 `x` 进行比较,如果相等则返回 `mid`,如果 `arr[mid] < x`,则说明 `x` 在 `mid` 右侧,将 `left` 更新为 `mid + 1`,否则说明 `x` 在 `mid` 左侧,将 `right` 更新为 `mid - 1`。最后如果循环结束仍未找到 `x`,则返回 `-1`。
阅读全文