查找算法笔记

二分查找

数组先排好序,然后从数组中间位置开始,如果中间元素等于查找元素,就停止查找,如果查找元素大于中间元素就在后半部分去继续查找,如果小于中间元素就到前半部分继续查找,直到找到为止。

代码实现:
function binarySearch($arr, $value) {
      $left = 0;

      $right = count($arr) - 1;

      while($left <= $right){

          if($value == $arr[$left]) { return $left; }

          $mid = floor(($left + $right)/2);  //向下取整
          if($value == $arr[$mid]) { return $mid;}

          if($value > $arr[$mid]) {
              $left = $mid +1;
          }else{
              $right = $mid -1;
          }

 }

分块查找

也叫索引查找,需要建立一个索引表,先根据索引定位,然后再进行表查找。

哈希查找

也叫散列查找,先计算元素的存储地址,然后根据地址直接定位。

树表查找

B树(二叉树)

function PreOrderTraverse($node){   //前序遍历

    print_r($node['data']);  //输出值

    PreOrderTraverse($node['lChild']);  //左节点

    PreOrderTraverse($node['rChild']);  //右节点

}

function inOrderTraverse($node){  //中序遍历

    inOrderTraverse($node['lChild']);  //左节点

    print_r($node['data']);   //输出值

    inOrderTraverse($node['rChild']);  //右节点

}

function postOrderTraverse($node){  //后序遍历

    postOrderTraverse($node['lChild']);  //左节点

    postOrderTraverse($node['rChild']);  //右节点

    print_r($node['data']);  //输出值

}

B- 树

即多路搜索树,关键字集合分布在整颗树中,B-树的搜索,从根结点开始,对关键字序列进行二分查找,如果命中则结束,否则进入查询关键字所属范围的儿子结点;重复,直到所对应的儿子指针为空,或已经是叶子结点。

B+ 树

B-树的变体,也是一种多路搜索树,所有关键字都在叶子结点出现,B+的搜索与B-树也基本相同,区别是B+树只有达到叶子结点才命中,非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储关键字的数据层,更适合文件索引系统。

B* 树

是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针,将结点的最低利用率从1/2提高到2/3。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值