我一直在試圖讓使用二進制搜索在一個向量元素的位置,找到沒有排序的向量元素而已,沒有循環,沒有什麼,從庫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