#include<iostream>
#include<vector>
using namespace std;
//折半查找法
//有序表即是表中数据元素按关键码升序或降序排列。(仅适用于有序的顺序表)
//折半查找的思想为:在有序表中,取中间元素作为比较对象,若给定值与中间元素的关键码相等,则查找成功;若给定值小于中间元素的关键码,则在中间元素的左半区继续查找;若给定值大于中间元素的关键码,则在中间元素的右半区继续查找。不断重复上述查找过程,直到查找成功,或所查找的区域无数据元素,查找失败。
//时间复杂度为O(logn)
int find(vector<int> vec, int target)
{
int low = 0, high = vec.size() - 1;
while (low < high)
{
int mid = (high-low) / 2;
if (target < vec[mid])
{
high = mid - 1;
}
else if (target > vec[mid]) {
low = mid + 1;
}
else {
return mid;
}
}
return -1;
}
int main()
{
vector<int> vec = { 3,7,8,2,1,4,6,11,25 };
for (unsigned int i = 0; i <= vec.size() - 1; i++)
{
cout << vec[i] << " ";
}
cout << endl;
int target = 8;
cout << find(vec, target) << endl;
system("pause>nul");
return 0;
}
折半查找法
最新推荐文章于 2023-10-15 23:20:29 发布