Example #1
0
function heapSort(&$arr)
{
    // 添加头元素
    array_unshift($arr, 0);
    $len = count($arr) - 1;
    // 初始化堆
    for ($i = floor($len / 2); $i > 0; $i--) {
        heapAdjust($arr, $i, $len);
    }
    for ($i = $len; $i > 0; $i--) {
        swap($arr[1], $arr[$i]);
        heapAdjust($arr, 1, $i - 1);
    }
    // 删除头元素
    array_shift($arr);
}
Example #2
0
function heapAdjust(array &$list, $i, $num)
{
    if ($i > $num / 2) {
        return;
    }
    $key = $i;
    $leftChild = $i * 2 + 1;
    $rightChild = $i * 2 + 2;
    if ($leftChild < $num && $list[$leftChild] > $list[$key]) {
        $key = $leftChild;
    }
    if ($rightChild < $num && $list[$rightChild] > $list[$key]) {
        $key = $rightChild;
    }
    if ($key != $i) {
        $val = $list[$i];
        $list[$i] = $list[$key];
        $list[$key] = $val;
        heapAdjust($list, $key, $num);
        // heapPrint($list);
    }
}