【问题标题】:Trouble with Binary Search二进制搜索的问题
【发布时间】:2013-09-19 19:35:57
【问题描述】:

那里。我正在尝试对文本文件进行二进制搜索。我正在将文本文件一与文本文件二进行比较。但是,我的二进制算法似乎不起作用并打印出它找到的元素。我的文本文件 2 是一个排序列表,我的 textfile1 是关键。 我需要一些关于如何解决这个问题的指导。这是我的代码:

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;
    }
}

【问题讨论】:

  • 那是因为您的密钥在 for 循环的每次迭代中都会发生变化。修改您的 binary_search 实现以采用单个键,并为您的键向量围绕它包装一个 for 循环。
  • std::binary_search...

标签: c++ binary-search


【解决方案1】:

搜索关键字在您的 binary_search 实现中的 for 循环的每次迭代中都会发生变化。修改您的实现以采用单个键,并为您的键向量围绕它包装一个 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

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

【讨论】:

    猜你喜欢
    • 2017-03-04
    • 2011-09-16
    • 2021-09-18
    • 2020-11-16
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    相关资源
    最近更新 更多