以下是使用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);
这是一个基于数组的堆排序算法实现。首先,它会构建一个大顶堆,然后逐个将堆顶元素(最大值)移到数组末尾,并重新构建堆。最终,数组将按升序排列。
请注意,在上述示例中,原数组被直接修改,因此函数的参数是传引用。如果您希望保持原始数组不变,可以在函数内部创建一个副本进行排序操作。