高手帮忙看看我写的二分查找哪里有问题?
c++吧
全部回复
仅看楼主
level 2
deng824 楼主
#include "chapter01/utils.h"
#include <random>
#include <iostream>
using namespace std;
int binarySearch(int A[], int l, int r, int v) {
while (l <= r) {
int m = (l+r)/2;
if (v < A[m]) {
r = m - 1;
} else if (v > A[m]) {
l = m + 1;
} else {
return m;
}
}
return -1;
}
int binarySearchRecursively(int A[], int l, int r, int v) {
if (l > r) {
return -1;
}
int m = (l + r) / 2;
if (v < A[m])
return binarySearchRecursively(A, l, m-1, v);
else if (v > A[m])
return binarySearchRecursively(A, m+1, r, v);
return m;
}
void binarySearch_test() {
constexpr int len = 10;
int a[len];
std::uniform_int_distribution<int> d(0, len);
std::random_device rd;
for (int &n : a) {
n = d(rd);
}
cout << "array:" << endl;
utils::printArray(a, len);
int ret = binarySearch(a, 0, len-1, 5);
cout << "5: ";
if (ret == -1) {
cout << "not found" << endl;
} else {
cout << "at " << ret << endl;
}
}
无论是用迭代还是递归,总是会出现数组里面明明有5但是就是输出”not found"
2014年10月28日 15点10分 1
level 9
给你跪了,二分耍求数组有序好么
2014年10月28日 16点10分 2
1