有关斐波那契查找-Java实现

其实对于斐波那契查找,是一种新的查找思想,对与其实用性我持怀疑态度;主要就是,黄金风分割得思想;

而斐波那契数列正好符合这一特性;其中的思想不过多赘述;主要事可以培养算法的思想;

 1 /***
 2      * fib查找
 3      * @param num 目标排查找数组
 4      * @param numSearch 目标数
 5      * @return 索引
 6      */
 7     public static int fibSearch(int[] num,int numSearch ){
 8         //初始化fin分割数组
 9         int[] fib=new int[20];
10         fib[0]=1;
11         fib[1]=1;
12         for (int i = 2; i < fib.length; i++) {
13             fib[i]=fib[i-1]+fib[i-2];
14         }
15         //获得就近的fib长度
16         int k=0;
17         while (num.length>fib[k]) {
18             k++;
19         }
20         //创建暂存的fib数组
21         int[] temp=Arrays.copyOf(num,fib[k]);
22         //用数组得最后一位数进行填充数组
23         for (int i = num.length; i < temp.length ; i++) {
24             temp[i]=temp[num.length-1];
25         }
26         //数组左端和右端的索引
27         int low=0;
28         int high= temp.length-1;
29         //黄金分割点
30         while (low<=high){
31             int mid=fib[k-1]-1+low;
32             if (numSearch==num[mid])
33                 return mid;
34             else if (numSearch>num[mid]){
35                 low=mid+1;
36                 k-=2;
37             }
38             else {
39                 high = mid - 1;
40                 k--;
41             }
42         }
43         return -1;
44     }

 

posted @ 2023-03-31 18:56  Mexcellent  阅读(37)  评论(0)    收藏  举报