C++的查找分为静态查找与动态查找。
静态查找:只是在查找表中判断是否有这一个元素,取出这个元素的属性。
动态查找:在查找过程中,会对查找表做出修改。 比如插入、删除。
静态查找
静态查找包括:顺序查找、二分查找、分块查找等。
顺序查找O(n)
查找表可以是有序或无序。顺序查找就是逐个比较。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vn_container;
for(int i = 1;i<=10;i++)
vn_container.push_back(i);
int target = 6;
for(int i = 0;i<vn_container.size();i++)
if(vn_container[i] == target)
{
cout<<"Exist"<<endl;
return 0;
}
cout<<"Don't exist"<<endl;
}
二分查找O(logn)
要求查找表为有序,然后将target和查找表的中间值比较。小于中间值的话,去左边查找,大于中间值的话,去右边查找(如果是升序的话)。
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> vn_container;
for(int i = 1;i<=10;i++)
vn_container.push_back(i);
int target = 6;
int left = 0,right = 9;
while(left < right)
{
int mid = (left + right) >> 1;
if(vn_container[mid] >= target) right = mid;
else left = mid + 1;
}
if(vn_container[left] != target)
cout<<"Don't exist"<<endl;
else
cout<<"exist"<<endl;
}