加减实现二分查找
来源:互联网 发布:代办淘宝商城 编辑:程序博客网 时间:2024/05/22 06:49
package sf1_4;/** * Created by LoveQuietly on 2016/9/7. */public class FibBinarySearch { public static void main(String[] args) { int myarr[] = {1, 2, 3, 5, 7, 9, 10, 11, 13, 15, 17, 19, 21, 24, 25, 26, 29}; //int myarr[]={1,2,3}; FibBinarySearch fibBinarySearch = new FibBinarySearch(); fibBinarySearch.fib(); int n = fibBinarySearch.binarySearch(myarr, 30); System.out.println(n); } //定义最大的斐波拉契数列 final int MAX = 100; //用来存储斐波拉契数列 int[] a = new int[100]; //初始化斐波拉奇书数列 public void fib() { a[0] = 1; a[1] = 1; for (int i = 2; i < MAX; i++) { a[i] = a[i - 1] + a[i - 2]; } } //查找数据 int binarySearch(int[] arr, int key) { int pos = 0; //在数列中查找最接近的大小 for (int i = 0; i < MAX; i++) { if (a[i] >= arr.length) { pos = i; break; } } // System.out.println(a[7]+" "+pos); //使用临时数组大小跟斐波拉奇数列的那个数字相同 int[] temp = new int[a[pos]]; //初始化temp数组使得前面数据相同 for (int i = 0; i < arr.length; i++) { temp[i] = arr[i]; } //超过数组长度使用最后的数字填充 for (int i = arr.length; i < a[pos]; i++) { temp[i] = arr[arr.length - 1]; } int lo = 0; int high = temp.length - 1; int mid = 0; //pos需要大于0保证数据不会溢出 while (lo <= high && pos >= 2) { //我是已斐波拉契数列的前面一个为mid mid = a[pos - 2] + lo - 1; //大于往右走 if (temp[mid] > key) { high = mid - 1; //这里要-2才行 pos = pos - 2; } else if (temp[mid] < key) { lo = mid + 1; //这里减1 pos--; } else if (temp[mid] == key) //找到分两种情况,一种是跟最后的数据相同返回最后的数据位置即可,一种是返回找到的位置 if (mid < arr.length - 1) return mid; else return arr.length - 1; } return -1; }}
1 0
- 加减实现二分查找
- 斐波那契查找(黄金分割法查找)(仅使用加减实现的二分查找)
- 斐波那契查找(黄金分割法查找)(仅使用加减实现的二分查找)
- 斐波那契查找(黄金分割法查找)(仅使用加减实现的二分查找)
- 仅用加减实现的二分查找(Mihai Patrascu)(基于斐波那契数列实现)
- 《算法》第一章——仅用加减实现的二分查找
- 算法 第四版 1.4.22 仅用加减实现的二分查找
- Java实现 二分查找
- 二分查找递归实现
- 正确实现二分查找
- Python实现二分查找
- 二分查找实现
- 二分查找实现
- 二分查找实现
- Java实现二分查找
- 二分查找实现
- java实现二分查找
- java实现二分查找
- 残差神经网络
- NSTimer的用法
- 将图片保存到相册
- 第二周项目0-宣告“主权”
- 基于树莓派3的CAN总线编程
- 加减实现二分查找
- 最长递增子序列详解(longest increasing subsequence)(转)
- MongoDB——mongo-connector实例使用(for elasticsearch)
- Gallery2源码阅读图片编辑
- PHP时间参数列表
- LTR的理解
- android studio开发<三> 新建Activity界面,切换界面,滑动条控件
- ExecutorService 线程池使用和分析
- Dubbo视频教程《基于Dubbo的分布式系统架构视频教程》--课程列表