斐波那契查找算法java版

與二分查找相比,斐波那契查找算法的明顯優點在於它只涉及加法和減法算,而不用除法。因爲除法比加減法要佔去更多的機時,因此,斐波那契查找的平均性能要比折半查找好。



public class Fibonacci_Search {

    privateint[] FibonacciList;

   public void Fibonacci(int n) {
       FibonacciList = new int[n];
       FibonacciList[0] = 0;
       FibonacciList[1] = 1;
       for (int i = 2; i < n; i++) {
           FibonacciList[i] = FibonacciList[i - 1] + FibonacciList[i -2];
       }
   }


   public int FibonacciSearch(int key, ArrayList data, intn) {
       Fibonacci(n);
       int low, high, mid, i, k;
       low = 1;
       high = n;
       k = 0;
       //找到在斐波那契數列中對應的位置。如需要查詢的數組長度爲10,則在斐波那契數列的6和7之間,則      //k=7;
       while (n > this.FibonacciList[k] - 1) {
           k++;
       }
       //由於Fibonacci[7]=13,於是11和12都爲空,避免出現查詢空值,因此將其複製爲data[10];
       for (i = n; i < FibonacciList[k] - 1; i++) {
           data.add(data.get(n));
       }
       while (low <= high) {
           mid = low + FibonacciList[k - 1] - 1;
           if (key < data.get(mid)) {
               high = mid - 1;
               k--;
           } else if (key > data.get(mid)) {
               low = mid + 1;
               k = k - 2;
           } else {
               if (mid <= n) {
                   

發佈了9 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章