基于有序列表的查找。
线性查找
1 | def search(arr, target): |
二分查找
二分查找(也称为折半查找),在给定一个有序数组的前提下,取中间的元素(arr[mid])作为比较的对象,如果target值大于中间元素,则在中间元素的右边继续查找,反之,则在中间元素的左边继续查找。
1 | def binary_search(arr, target): |
斐波那契数列查找
斐波那契数列公式:
斐波那契查找步骤如下:
第一步:从斐波那契数列中找到第一个大于或等于数组长度(n)的数(fibM)
第二步:当数组中还有未遍历的元素时:
1. 将游标cur定义为fib2覆盖部分的最后一个元素
2. 比较目标值与arr[cur]进行比较,如果匹配,立即返回索引,完成查找
3. 如果目标值大于arr[cur],则把斐波那契数列下降一个单位
4. 如果目标值小于arr[cur],则把斐波那契数列下降两个单位
第三步:如果仅余一个元素用于比较,检验fib1是否等于1,如果是,判断该元素是否为target
1 | def fibMonaccianSearch(arr, target, n): |