import java.util.Arrays;
public class FibonacciSearch {
public static int maxSize = 20;
public static void main(String[] args) {
int[] array = {1, 8, 10, 89, 1000, 1234};
int index = fibonacciSearch(array, 89);
if(index != -1) {
System.out.println("index = " + index);
} else {
System.out.println("没有找到~");
}
}
public static int[] fibonacci() {
int[] f = new int[maxSize];
f[0] = 1;
f[1] = 1;
for (int i = 2; i < maxSize; i++) {
f[i] = f[i-1] + f[i-2];
}
return f;
}
public static int fibonacciSearch(int[] array, int value) {
int low = 0;
int high = array.length - 1;
int mid = 0;
int midValue = 0;
int fi[] = fibonacci();
int k = 0;
while(high > fi[k] - 1) {
k++;
}
int[] temp = Arrays.copyOf(array, fi[k]);
for (int i = high + 1; i < fi[k]; i++) {
temp[i] = temp[high];
}
while(low <= high) {
mid = low + fi[k-1] - 1;
midValue = temp[mid];
if(value < midValue) {
high = mid - 1;
k--;
} else if (value > midValue) {
low = mid + 1;
k -= 2;
} else {
if(mid<=high) {
return mid;
} else {
return high;
}
}
}
return -1;
}
}
斐波那契【黄金分割】查找算法
最新推荐文章于 2024-07-21 15:26:41 发布