给定一个存储n个整数的排序数组A和一个值键。设计 一种有效的分而治之算法,它返回值的索引 key,如果它可以在数组A中找到。否则,算法返回0。
答案 0 :(得分:1)
我认为对于您的描述,最好的选择是二分搜索(二分搜索)。算法是通过将数组分成两半来购买,如果在中间找到的元素高于,低于或等于您要查找的项目。这样做是为了减少搜索空间以对数地找到元素或确定元素不在向量中。必须对数组进行排序。
这是C ++中的一个例子
#include <vector>
bool busqueda_dicotomica(const vector<int> &v, int principio, int fin, int &x){
bool res;
if(principio <= fin){
int m = ((fin - principio)/2) + principio;
if(x < v[m]) res = busqueda_dicotomica(v, principio, m-1, x);
else if(x > v[m]) res = busqueda_dicotomica(v, m+1, fin, x);
else res = true;
}else res = false;
return res;
}
我认为如果没有找到你的算法不应该返回0,因为如果你想返回元素的索引,0是第一个元素的索引
In this article is the detailed explanation of the binary search或in this other