Вы можете просто использовать двоичный поиск , который будет работать в O (log (n)).
Вот фрагмент кода Lua (у меня нет времени делать это в C ++, извините), который делает то, что вы хотите, за исключением предельных условий (которые вы так и не определили):
function search(value, list, first, last)
if not first then first = 1; last = #list end
if last - first < 2 then
return list[first], list[last]
end
local median = math.ceil(first + (last - first)/2)
if list[median] > value then
return search(value, list, first, median)
else
return search(value, list, median, last)
end
end
local list = {1,10,100,1000}
print(search(arg[1] + 0, list))
Требуется значение для поиска из командной строки:
$ lua search.lua 10 # didn't know what to do in this case
10 100
$ lua search.lua 101
100 1000
$ lua search.lua 99
10 100