<?PHP
$arr = [3,5,9,1,6,8,55,2,7,23,4,111];
$sortArr = sort_heap($arr);
var_dump($sortArr);
//推排序
function sort_heap($arr)
{
$newArr = [];
while (count($arr) > 1) {
$n = count($arr);//数组长度
for ($j = floor($n / 2); $j >= 0; $j--) {//从中间位置开始遍历
for ($p = $j,$child = $p * 2 + 1; $p * 2 + 1 < $n;) {//到最后一个有子节点的位置结束
if (isset($arr[$child + 1]) && $arr[$child] > $arr[$child + 1]) {//选择最大的子节点
$child++;
}
if ($arr[$child] < $arr[$p]) {
swap($arr[$child] , $arr[$p]);//交换子节点和父节点
$p = $child;
} else {
break;
}
}
}
swap($arr[$n - 1] , $arr[0]);//将开始节点和最后节点交换
$max = array_pop($arr);//将最大的那个节点放置在结果数组中
$newArr[] = $max;
}
$newArr[] = array_pop($arr);//将最后的那个节点放置在结果数组中
return $newArr;
}
function swap(&$a,&$b){
$a = $a ^ $b;
$b = $a ^ $b;
$a = $a ^ $b;
}
堆排序(PHP实现)
最新推荐文章于 2021-03-10 15:28:12 发布