BeatificDevin

。。

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
#include <iostream>
using namespace std;
#define N 10

int fib(int n)
{
    if(n == 0)
    {
        return 0;
    }
    else if(n == 1)
    {
        return 1;
    }
    else
    {
        return (fib(n-1) + fib(n-2));
    }
}

//普通查找:
int sequenctial_Search(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 = 0;
   high = n-1;
   while(low <= high)
   {
      mid = (int)(low + high)/2;
      if(key < a[mid])
      {
         high = mid-1;
      }
      else if(key > a[mid])
      {
         low = mid+1;
      }
      else
         return mid;
   }
   return 0;
}

//差值查找(斐波那契查找)
int Fib_Search(int *a,int n,int key)
{
    int low,high,mid,k;
    low = 0;
    k = 0;
    while(n > fib(k)-1)
    {
        k = k + 1;
    }
//    for(i = n;i < fib(k)-1;i++)
//    {
//        a[i] = -1;
//    }
    high = fib(k)-1;
//    cout << k<<endl;
    while(low <= high)
    {
        mid = low + fib(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 -1;
        }
    }
    return 0;
}

int main()
{
   int a[N] = {1,2,4,5,6,8,9,10,20,31};
   int key,result;
   cout << "please input the key:";
   cin >> key;
   result = sequenctial_Search(a,N,key);
   cout<<result<<endl;

   result = Binary_Search(a,N,key);
   cout << result<<endl;

    result = Fib_Search(a,N,key);
   cout<<result<<endl;
   return 0;
}

  

posted on 2015-06-01 21:28  BeatificDevin  阅读(490)  评论(0编辑  收藏  举报