数组查找时一个很常见的问题,通常的查找方式一般为二分查找,有时也会用到黄金分割查找或者斐波那契查找,本文意在实现二分查找与斐波那契查找。
二分查找的实现
int binary_search(const int* a, int n, int target)
{
int low = 0;
int high = n;
while(low<=high)
{
int mid = (low+high)/2;
if(a[mid] == target)
return mid;
else if(a[mid] > target)
high = mid-1;
else
low = mid+1;
}
return -1;
}
斐波那契查找的实现
int fibonacci_search(int* a, int n, int target)
{
int fibonacci[] = {0,1,1,2,3,5,8,13,21,34,55};
int k=0;
while(fibonacci[k] <= n+1)
k++;
int low=0;
int high = n;
for(int i=n+1; i<fibonacci[k]-1; i++)
{
a[i] = a[high];
}
high = fibonacci[k]-2;
k = k-1;
while(low<=high)
{
int mid = low + fibonacci[k] - 1;
if(a[mid] == target)
{
if(mid >= n)
return n;
return mid;
}
else if(a[mid] > target)
{
high = mid-1;
k = k-1;
}
else
{
low = mid+1;
k = k-2;
}
}
ret