Проблема с бинарным поиском

там. Я пытаюсь получить бинарный поиск текстового файла. Я сравниваю текстовый файл один с текстовым файлом два. Тем не менее, мой двоичный алгоритм, похоже, не работает и распечатывает найденный элемент. Мой текстовый файл 2 — это отсортированный список, а мой текстовый файл1 — это ключ.
Мне нужно несколько советов о том, как решить эту проблему. Вот мой код:

bool binary_search(const vector<string>& sorted_vec, const vector<string>& key) {
size_t mid, left = 0;
size_t right = sorted_vec.size(); // one position passed the right end

while (left < right) {
mid = left + (right - left)/2;
for(int i=0;i<sorted_vec.size();i++){
if (key[i] > sorted_vec[mid]){ //
left = mid+1;
}else if (key[i] < sorted_vec[mid]){
right = mid;
}else{
return true;
}
}

return false;
}
}

0

Решение

Ключ поиска меняется на каждой итерации цикла for в вашей реализации binary_search. Измените вашу реализацию так, чтобы она брала один ключ, и оберните его циклом for для вашего вектора ключей. Однако я согласен с @ H2CO3, что вы должны использовать std::binary_search:

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;
vector<int> sorted_vec = {1, 2, 3, 4, 5, 6, 7, 8};
vector<int> keys = {3, 5, 19, 27, 0, 2};

int main() {
for(const auto &key : keys) {
cout << binary_search(sorted_vec.cbegin(), sorted_vec.cend(), key) << endl;
}
}

Выход

1
1
0
0
0
1

Если вы хотите использовать свой собственный двоичный_поиск, вам нужно исправить текущую реализацию.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector