假设我有很多值的数组(C++ 语法,抱歉):
vector<double> x(100000);
这个数组是这样排序的x[n] > x[n-1]
。
我想要一个函数来检索 [a, b] 范围内所有值的数组(包括在内)。一些界面如:
void subarray(const double a, const double b, vector<double> &sub) {
...
}
当此函数完成时,sub
将包含n
范围 [a, b] 内的值。
当然,线性搜索很容易:
void subarray(const double a, const double b, vector<double> &sub) {
for (size_t i = 0; i < data.size(); i++) {
if (a <= data[i] && data[i] <= b) {
sub.push_back(data[i]);
}
}
}
但是,因为data
是排序的,所以我应该能够使用二分搜索更快地做到这一点。谁想试一试?允许任何语言!