我一直在试图让使用二进制搜索在一个向量元素的位置,找到没有排序的向量元素而已,没有循环,没有什么,从库algorithm
只是二进制搜索功能。使用二进制搜索已排序向量
由于二进制搜索函数仅适用于已排序的容器类型,我不知道如何获取原始向量的搜索元素的位置,因为一旦向量排序,搜索到的元素的位置可能不会与在原始矢量中。
我做的代码工作,std::find
,但我的主要目标是,只有二进制搜索功能做这个工作。
代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v {1, 10, 100, -11, -112, -17, 44, -99, 99, 558};
std::vector<int> sorted = v;
std::sort(sorted.begin(), sorted.end());
std::cout << "Enter a number: ";
int number;
std::cin >> number;
if(std::binary_search(sorted.begin(), sorted.end(), number) == false)
{
std::cout << "There is no entered number.";
}
else
{
std::cout << "Number is located on position: ";
std::cout << std::find(v.begin(), v.end(), number) - v.begin();
}
return 0;
}
输出的例子:
1°
Enter a number: 99
Number is located on position: 8
2°
Enter a number: -546
There is no entered number.
所以,如果有人可以帮助我做二进制这项工作功能,而不是std::find
或者给我几点想法,我会很感激。
谢谢:)
您无法对未排序的数据集执行二分搜索。算法的工作方式依赖于被排序的数据。 – NathanOliver
您可以在包含原始索引的集合上同时执行与排序中相同的操作,并在搜索后查找原始位置。这比线性搜索慢,因此除非您需要多次搜索,否则它毫无意义。 – molbdnilo