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


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

      

  • 相关阅读:
    Fleury算法
    2012 MultiUniversity Training Contest 2
    高斯若尔当消元法(线性代数)
    hdu4307(最小割)
    hdu4305(生成树计数)
    hdu4318(最短路)
    hdu4309(网络流)
    hdu4313(生成树)
    生成树计数
    MYSQL 远程登录及常用命令
  • 原文地址:https://www.cnblogs.com/devinblog/p/4544981.html
Copyright © 2020-2023  润新知