其实对于斐波那契查找,是一种新的查找思想,对与其实用性我持怀疑态度;主要就是,黄金风分割得思想;
而斐波那契数列正好符合这一特性;其中的思想不过多赘述;主要事可以培养算法的思想;
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 }
标签:fib,Java,temp,int,斐波,length,num,数组,那契 From: https://www.cnblogs.com/Mexcellent/p/17277232.html