用c++实现折半查找的非递归算法
时间: 2023-08-24 07:11:29 浏览: 107
折半查找,也称二分查找,是一种在有序数组中查找某一特定元素的算法。以下是用C++实现折半查找的非递归算法:
```c++
#include <iostream>
using namespace std;
int binarySearch(int arr[], int n, int target) {
int left = 0;
int right = n - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int n = sizeof(arr) / sizeof(arr[0]);
int target = 7;
int result = binarySearch(arr, n, target);
if (result != -1) {
cout << "找到了目标元素,下标为:" << result << endl;
} else {
cout << "未找到目标元素" << endl;
}
return 0;
}
```
在这个算法中,我们用两个变量`left`和`right`分别表示当前查找范围的左右边界,初始时`left`为数组第一个元素的下标,`right`为数组最后一个元素的下标。接着,在每次循环中,我们计算出当前查找范围的中间位置`mid`,并将其与目标元素进行比较。如果中间元素等于目标元素,则直接返回中间元素的下标;如果中间元素小于目标元素,则将查找范围缩小到右半部分,即将`left`更新为`mid+1`;如果中间元素大于目标元素,则将查找范围缩小到左半部分,即将`right`更新为`mid-1`。
当`left > right`时,说明查找范围已经缩小到了空集,即未找到目标元素,此时返回-1表示未找到。
阅读全文