Допустим, у меня есть массив с множеством значений (синтаксис 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
отсортирован, я смогу сделать это намного быстрее, используя бинарный поиск. Кто хочет нанести удар? Разрешен любой язык!