斐波那契查找
原理:利用斐波那契數列的性質,黃金分割的原理來確定mid的位置。
代碼如下:
/*斐波那契 查找*/ int Fbonacci_Search(int *a, int n, int key) {int low,high,mid,i,k;int F[] = {0,1,1,2,3,5,8,13,21,34}; //經典的斐波那契數列已經早就定義好,也可以遞歸自己求解。low = 1;high = n;k = 0;while(n > F[k] - 1) //計算 n 位于斐波那契數列的位置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--;}else {if(key > a[mid]){low = mid + 1;k = k -2;}else{if(mid <= n)return mid;elsereturn n;}}} }
總結
- 上一篇: Maximum Depth of Bin
- 下一篇: 棋盘寻宝