在你的代码中,条件 `while(left<right)` 是没有被满足的时候会跳出循环。你需要添加一个判断条件,来判断目标元素是否在数组中存在。
以下是修正过的代码:#include <iostream>using namespace std;int n;int lml(int a[], int left, int right, int mu) { while (left <= right) { int mid = left + (right - left) / 2; if (a[mid] == mu) { return mid; } if (a[mid] < mu) { left = mid + 1; } else { right = mid - 1; } } return -1; // 目标元素不存在}int main() { cout << "请输入数组长度:"; cin >> n; int* a = new int[n]; cout << "请输入数组元素(递增排序):"; for (int i = 0; i < n; i++) { cin >> a[i]; } int mu; cout << "请输入要查找的元素:"; cin >> mu; int result = lml(a, 0, n - 1, mu); if (result == -1) { cout << "目标元素不存在" << endl; } else { cout << "目标元素在数组中的位置为:" << result+1 << endl; } delete[] a; return 0;}
在这个修正后的代码中,首先输入了数组的长度 `n` 和数组的元素 `a`(递增排序),然后输入要查找的目标元素 `mu`。接下来调用 `lml` 函数进行二分查找,如果查找到了目标元素,则返回该元素在数组中的位置;如果没有查找到,则返回 -1。最后输出结果。
请确保输入的数组是递增排序的,并且目标元素在数组中存在。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。 |