<?php
/**
* Created by PhpStorm.
* User: baimayou
* Date: 19-3-24
* Time: 下午6:29
* 堆:
* 堆是一个完全二叉树;
* 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。
* 堆是由数组组成,且从1开始
*/
//建立堆,向堆中插入元素(从下向上堆化)
function buildHeap(&$arr,$value){
if(is_null($arr)){
$arr[0] = null;
$arr[1] = $value;
}
$num = count($arr);
$arr[$num] = $value;
$j = $num;
$i = $j>>1;
while($value > $arr[$i] && $i>=1){
temp($arr,$i,$j);
$j = $i;
$i = $j>>1;
}
}
//删除堆顶元素(将堆中的最后一个元素与堆顶元素交换位置,然后从上向下堆化)
function deleteHeap(&$arr){
if(is_null($arr)){
return false;
}
$num = count($arr);
$arr[1] = $arr[$num - 1];
unset($arr[$num-1]);
$value = $arr[1];
$i = 1;
$j = $i * 2;
while($value < $arr[$j] && $j<$num-1){
temp($arr,$i,$j);
PHP实现 堆
最新推荐文章于 2023-04-19 09:34:37 发布