php堆排序
php堆排序,堆排序是一种比冒泡排序更好的排序方法。
虽然复杂了一些,但是在处理长数据数组时更有性价比。
<?php function swp(&$arr, $n, $i) { $root = $i; // 初始化最大值为根节点 $left = 2 * $i + 1; // 左子节点 $right = 2 * $i + 2; // 右子节点 // 如果左子节点存在且大于根节点 if ($left < $n && $arr[$left] > $arr[$root]) { $root = $left; } // 如果右子节点存在且大于根节点 if ($right < $n && $arr[$right] > $arr[$root]) { $root = $right; } // 如果最大值不是根节点 if ($root != $i) { // 交换根节点和最大值节点 list($arr[$i], $arr[$root]) = array($arr[$root], $arr[$i]); // 递归调整子树 swp($arr, $n, $root); } } function heapSort(&$arr) { $n = count($arr); // 构建最大堆(从最后一个非叶子节点开始) for ($i = intval($n / 2) - 1; $i >= 0; $i--) { swp($arr, $n, $i); } // 逐个提取堆顶元素 for ($i = $n - 1; $i > 0; $i--) { // 将堆顶元素(最大值)与末尾元素交换 list($arr[0], $arr[$i]) = array($arr[$i], $arr[0]); // 调整剩余堆 swp($arr, $i, 0); } } // 示例 $arr = [4, 10, 3, 5, 1]; echo "排序前: " . implode(", ", $arr) . "\n"; heapSort($arr); echo "排序后: " . implode(", ", $arr) . "\n"; ?>