二分查找的非递归c++算法要求:待查找/待排序的记录用数组存储,且记录个数不小于100000个,记录的初始状态自定义
时间: 2024-03-11 19:46:51 浏览: 58
好的,下面是一个非递归的C++实现二分查找算法,符合你的要求:
```c++
#include <iostream>
using namespace std;
int binarySearch(int arr[], int n, int target) {
int left = 0, 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 n = 100000;
int arr[n];
// 初始化数组
for(int i = 0; i < n; i++) {
arr[i] = i;
}
int target = 56789;
int res = binarySearch(arr, n, target);
if (res == -1) {
cout << "未找到目标元素";
} else {
cout << "目标元素的下标为:" << res;
}
return 0;
}
```
这个算法的核心思想是,将待查找的区间不断缩小为左右两个边界,每次取区间中间的数与目标数比较,如果相等,则返回中间数的下标,如果小于目标数,则将左边界右移,如果大于目标数,则将右边界左移。当左边界大于右边界时,说明查找失败,返回-1。
阅读全文