二进制搜索的问题

Trouble with Binary Search

本文关键字:问题 搜索 二进制      更新时间:2023-10-16

there.我正在尝试对文本文件进行二进制搜索。我正在比较文本文件一和文本文件二。但是,我的二进制算法似乎无法打印出它找到的元素。我的文本文件 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;
    }
}

搜索键在 binary_search 实现中 for 循环的每次迭代中都会更改。修改您的实现以采用单个键,并为您的键向量围绕它包装一个 for 循环。但是,我同意您应该使用std::binary_search@H2CO3

#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

如果您希望使用自己的binary_search,则需要修复当前的实现。