8 находит лучше, потому что код проще и понятнее.
Впрочем, думать о производительности веселее, поэтому я тоже так сделаю.
Как сказал Артелий, когда я писал этот ответ, не обращайте внимания на сложность. Это не актуально, потому что вы знаете, что n = 100. Например, сортировка вставки имеет более сложную алгоритмическую сложность, чем быстрая сортировка (по крайней мере, в среднем случае), но почти во всех реализациях сортировка вставки выполняется быстрее, чем быстрая сортировка для малых n, и поэтому быстрые сортировки разбиваются на сортировку вставок в конце. Ваш n также мал, так что ограничение как n -> бесконечность не имеет значения.
Поскольку код для обоих вариантов прост в написании, я бы предложил его профилировать. Это (а) скажет вам, что быстрее, и (б) докажет, что оба они настолько быстры, что не имеет значения, что вы делаете (если только это не единственная вещь, которую делает ваша программа, и она делает это много). Тем более, что вы говорите о включении ключа - если ключ является целочисленным типом, то ограничивающим фактором, скорее всего, будут проблемы с кэшем памяти, чем при любой фактической обработке.
Однако, если это не удается, обычно способ сравнения алгоритмов поиска заключается в подсчете сравнений, исходя из предположения, что они намного медленнее, чем обход структур. Если ничто иное, каждое сравнение обращается к памяти и представляет собой непредсказуемую ветвь, из-за которой ЦП зачастую хуже всего.
Если вы сортируете свои 8 элементов перед началом (что требует 24 сравнений или около того) вместо предлагаемого вами переключателя, то, поскольку карта также отсортирована, вам нужно сделать только одно сравнение на каждом узле, который вы проходите, плюс один сравнение по элементу, который вы ищете (сравните один узел с каждой "стороны". Если они совпадают, увеличивайте обе стороны. Если они не совпадают, увеличивайте сторону с меньшим элементом). Так что в худшем случае это 8 + 100 или меньше, если вы найдете все 8 до того, как доберетесь до конца. Но среднее положение последних 8, если они случайно расположены на карте, все равно примерно 8/9 пути. Поэтому назовите это 8 + 88 + 24 = 120 сравнений, при этом 132 - наихудший случай. В лучшем случае это 8 (если все, что вы ищете, все в начале) +24 (для начальной сортировки) = 32 сравнения, или даже лучше, если вам повезло и с сортировкой, или ваши 8 элементов поиска по какой-то причине готовый.
Средняя глубина узла в красно-черном дереве (обычно это карта) немного больше log2 (n). В этом случае назовите его 7, поскольку 2 ^ 7 равно 128. Таким образом, для поиска 8 элементов потребуется примерно 56 сравнений. IIRC характеристика баланса красно-черного дерева состоит в том, что самый глубокий узел не более чем в два раза глубже самого мелкого. Таким образом, наихудшая глубина - это floor (2 * log2 (n)), назовите его 15, что в сумме составляет 120, а лучшим является ceil (1/2 log2 (n)), что равно 4. Это снова 32 сравнения.
Если предположить, что сравнения - это единственное, что влияет на скорость, 8 находок будут где-то в 4 раза быстрее и в 4 раза медленнее, чем линейный обход, с в 2 раза лучшим средним.
Линейный обход, вероятно, затронет больше памяти, поэтому может быть медленнее в этом отношении. Но, в конечном счете, для n = 100 вы говорите миллисекунды, так что просто делайте любой самый простой код (вероятно, 8 находок). И я упоминал, что если вы действительно хотите знать скорость, которую вы не можете предсказать, вы просто должны профилировать ее?