//顺序查找,a为数组,n为要查找的数组长度,key为要查找的关键字
void Sequential_Search(int *a, int n, int key)
{
int i;
for(i=1;i<=n;i++)
{
if(a[i]==key)
return i;
}
return 0;
}
//有哨兵顺序查找
void Sequential_Search2(int *a, int n, int key)
{
int i;
a[0] = key;
i = n;
while(a[i]!=key)
{
i--;
}
return i;
}
//折半查找,首先是个有序表
int Binary_Search(int *a, int n, int key)
{
int low, high, mid;
low = 1;
high = n;
while( low <= high )
{
mid = ( low+high ) /2;
if(key<a[mid])
{
high = mid-1;
}
else if(key>a[mid])
{
low = mid+1;
}
else
return mid;
}
return 0;
}
//斐波那契查找,待查找的顺序表顺序存储且有序
int Fibonacci_Search(int *a, int n, int key)
{
int low,high,mid,i,k;
low = 1;
high = n;
k = 0;
while(n>F[k]-1)
k++;
for(i=n; i<F[k]-1; i++)
a[i] = a[n];
while(low<=high)
{
mid = low+F[k-1]-1;
if(key<a[mid])
{
high = mid-1;
k=k-1;
}
else if(key<a[mid])
{
low = mid+1;
k = k-2;
}
else
{
if(mid<=n)
return mid;
else
return n;
}
}
return 0;
}