久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

斐波那契查找

 sky_feiyang 2014-05-28
與二分查找和插值查找的區(qū)別在于 分割的位置不同 利用了黃金分割的原理
 
 
F[k]-1=F[k-1]-1 + mid +F[k-2]-1
所以要比較的是F[k]-1而不是F[k],這樣能保證每次處理完后剩下的仍是F[i]-1
 
若待查找數(shù)組n!=F[K]-1,,則擴(kuò)充到F[K]-1
 
代碼如下:
#include <iostream>
#include <math.h>
using namespace std;
void Fabonaci(int* f)
{
 f[0]=1;
 f[1]=1;
 for (int i=2;i<20;i++)
 {
  f[i]=f[i-1]+f[i-2];
 }
}
int search(int* f,int n,int k)
{
 int m_f[20]={0};
 Fabonaci(m_f);
 int j=0;
 while (n>(m_f[j]-1))
 {
  j++;
 }
 int i=0;
 for (i=n;i<(m_f[j]-1);i++)
 {
  f[i]=f[n-1];
 }
 int low=0,high=i,mid=0;
 while (low<=high)
 {
  mid=low+m_f[j-1]-1;
  if (f[mid]==k)
  {
   //若找到的位置大于最初數(shù)組元素的個數(shù),,則mid置為n-1,因為最初把數(shù)組以f[n-1]擴(kuò)充到了m_f[j]-1
   if (mid>n-1)
   {
    mid=n-1;
   }
   return mid;
  }
  else if (f[mid]<k)
  {
   j=j-2;
   low=mid+1;
  }
  else
  {
   j=j-1;
   high=mid-1;
  }
 }
 return -1;
}
int main()
{     
 int s[20]={0,2,3,5,6,8,9,11,23,55,88,99,100,102,105,123,142,168,203,328};
 int k;
 while (cin>>k)
 {
  if (search(s,20,k)!=-1)
  {
   cout<<"位置為:"<<endl;
   cout<<search(s,20,k)<<endl;
  }
  else
  {
   cout<<"沒有該值!"<<endl;
  }
 }
 return 0;
}
 
 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多