二分法的改进方法(C++)(Fibonacci Search)
一、二分法的引入
1.背景
要求:
在一个有序向量中查找一个目标元素值,找到返回下标,反之返回-1。
直观思路:
挨个对比,时间复杂度为o(n)。
但是相对于下面的算法,其复杂度的差距还是让我们难以忍受的。
2.思路
对于直观思路的这种算法,在无序向量下通常也适用。然而对于有序这个条件来说,我们往往可以采用“减而治之”,通过从对半比较,将问题的规模每次缩小一半,可以大大减少时间复杂度。
3.实现(主要设计思路)
template<typename T>
static Rank binSearch(T*A,T const&e,Rank lo,Rank hi)
{
while(lo<hi)//每部迭代可能要做两次比较判断,有三个分支
{
Rank mi=(lo+hi)>>1;//以中点为轴点
if(e<A[mi