PHP实现堆排序

以下是使用PHP实现堆排序算法的示例代码:

// 构建大顶堆  
function buildHeap(&$arr, $n, $i) {  
    $largest = $i; // 将当前节点标记为最大值  
    $left = 2 * $i + 1; // 左子节点的索引  
    $right = 2 * $i + 2; // 右子节点的索引  
  
    // 如果左子节点大于根节点,则将其标记为最大值  
    if ($left < $n && $arr[$left] > $arr[$largest]) {  
        $largest = $left;  
    }  
  
    // 如果右子节点大于最大值,则将其标记为最大值  
    if ($right < $n && $arr[$right] > $arr[$largest]) {  
        $largest = $right;  
    }  
  
    // 如果最大值不是根节点,则交换根节点和最大值,并递归地构建子树  
    if ($largest != $i) {  
        $temp = $arr[$i];  
        $arr[$i] = $arr[$largest];  
        $arr[$largest] = $temp;  
        buildHeap($arr, $n, $largest);  
    }  
}  
  
// 堆排序算法  
function heapSort(&$arr) {  
    $n = count($arr);  
  
    // 构建大顶堆,从最后一个非叶子节点开始  
    for ($i = intval($n / 2) - 1; $i >= 0; $i--) {  
        buildHeap($arr, $n, $i);  
    }  
  
    // 逐个将堆顶元素移到末尾,并重新构建堆  
    for ($i = $n - 1; $i >= 0; $i--) {  
        $temp = $arr[0];  
        $arr[0] = $arr[$i];  
        $arr[$i] = $temp;  
  
        buildHeap($arr, $i, 0);  
    }  
}  
  
// 示例用法  
$nums = [6, 3, 8, 2, 9, 1];  
echo "原数组:";  
print_r($nums);  
  
heapSort($nums);  
echo "排序后的数组:";  
print_r($nums);  

这是一个基于数组的堆排序算法实现。首先,它会构建一个大顶堆,然后逐个将堆顶元素(最大值)移到数组末尾,并重新构建堆。最终,数组将按升序排列。

请注意,在上述示例中,原数组被直接修改,因此函数的参数是传引用。如果您希望保持原始数组不变,可以在函数内部创建一个副本进行排序操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值