数据结构--向量

1.有序向量----Fibonacci查找:对二分查找的改进

         与二分查找相比,Fibonacci查找算法的明显优点在于它只涉及加法和减法算,而不用除法。因为除法比加减法要占去更多的机时,因此,Fibonacci查找的平均性能要比折半查找好。  

       例子:

         template<typename T>

         static Rank fibSearch(T *A,T const &e,Rank lo,Rank hi)

          {

               Fib fib(hi-lo);

              while(lo<hi)

                  {

                    while(lo-hi<fib.get())

                   fib.prev():

                   Rank mi=lo+fib.get-1;

                  if(e<A[mi])

                  hi=mi;

                 else if(a[mi]<e)

                lo=mi+i;

               else

              return mi;

               }

          return -1;

          }

  查找长度只有向左向右失败后才会终止查找。


2.有序向量----插值查找:就是二分查找的改进

         插值查找其实说白了就是上面二分查找的优化,因为从中间对查找表进行拆分并不是最优的解决方案。因为我们的查找表是有序的,当我们感觉一个值比较大时,会直接从后边来查找。

        插值查找就是让mid更趋近于我们要查找的值,将查找表缩小到更小的范围中,这样查找的效率肯定会提升的。

3.起泡排序

       起泡排序的过程就是在两个数逆序的时候交换

        在某趟排序的比较中,若发现两两比较没有交换记录,说明这时候已经有序,没必要比较到最后}

4.归并排序

  归并排序是多次将两个或两个以上的有序表合并成一个新的有序表

   归并排序有两种实现方法:自底向上和自顶向下。

  1.稳定性

      归并排序是一种稳定的排序。
  2、存储结构要求
     可用顺序存储结构。也易于在链表上实现。
  3、时间复杂度
     对长度为n的文件,需进行 一趟二路归并,每趟归并的时间为O(n),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(nlgn)。
  4、空间复杂度
     需要一个辅助向量来暂存两有序子文件归并的结果,故其辅助空间复杂度为O(n),显然它不是就地排序。
  注意:
     若用单链表做存储结构,很容易给出就地的归并排序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值