算法复习-查找(2)-折半查找法

折半查找法

折半查找要求线性表是有序的,即表中记录按关键字排序。

代码:

int BinarySearch(int array[], int low, int high, int k) {
  int mid;
  while (low <= high) {
    mid = (low + high) /  2;
    if (k < array[mid])
      high = mid - 1;
    else if (k > array[mid])
      low = mid + 1;
    else
      return mid + 1;
  }
  return 0;
}

ASL分析:

折半查找的过程可以用二叉树来表示,把当前查找区间中的中间位置上的记录作为树根,左子表和右子表中的记录分别作为根的左子树和右子树,由此得到的二叉树称为折半查找判定树
例如有序序列:{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}
可以构建如下判定树:

折半查找判定树.png

由折半查找判定树可以求得ASL:
上图中ASL = (3+4+2+3+4+1+3+4+2+4+3+4)/12

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 查找是在大量的信息中寻找一个特定的信息元素,在计算机应用中,查找是常用的基本运算,例如编译程序中符号表的查找。本文...
    北方蜘蛛阅读 2,940评论 1 4
  • 原文出处:http://www.cnblogs.com/maybe2030/p/4715035.html引文出处:...
    明教de教主阅读 9,222评论 0 7
  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,994评论 0 13
  • 本文的整理基于:http://blog.csdn.net/qq_23217629/article/details/...
    阿阿阿阿毛阅读 1,621评论 0 3
  • 目录 [1. 顺序查找][2. 二分查找][3. 插值查找][4. 斐波那契查找][5. 树表查找][6. 分块查...
    jiangmo阅读 17,852评论 4 6