Получилось, но "в общем виде" не дотянулся. Псевдокод
C++ (Qt)
template <class Key, class Container>
void FindMultiRecursive(
const Container & data, // data container
const Key & loKey, // min key to search
const Key & hiKey, // max key to search
SInt32 beg, SInt32 end ) // search range indices
{
while (end - beg > 1) {
SInt32 mid = (beg + end) / 2;
const Key & midKey = data[mid];
if (midKey < loKey)
beg = mid;
else
if (midKey > hiKey)
end = mid;
else {
// here is most interesting
// ...
//
FindMultiRecursive(data, loKey, midLoKey, beg, mid);
FindMultiRecursive(data, midHiKey, hiKey, mid, end);
return;
}
}
}
Смысл в том что искомый диапазон лежит внутри индексов поиска, схема
Key[beg]------------- loKey --------- hiKey ----------Key[end]
Когда поиск попадает между 2 искомыми ключами, выбираются 2 новых ключа из искомого диапазона и крутим рекурс