码迷,mamicode.com
首页 > 其他好文 > 详细

查找(哨兵查找、二分查找、差值查找)

时间:2015-06-01 22:27:13      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

#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;
}

  

查找(哨兵查找、二分查找、差值查找)

标签:

原文地址:http://www.cnblogs.com/devinblog/p/4544981.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!