<?php
function swap(&$A,$a,$b)
{
$temp=$A[$a];
$A[$a]=$A[$b];
$A[$b]=$temp;
}
//获取左节点的下标
function LEFT($t){
return 2*$t+1;
}
//获取右节点的下标
function RIGHT($t){
return 2*($t+1);
}
//堆排序
function Heapify(&$A,$n,$t)
{
$left=LEFT($t);
$right=RIGHT($t);
$max=$t;
if($left<=$n){
$max=$A[$left] > $A[$max] ? $left:$max;
}
if($right<=$n){
$max=$A[$right] > $A[$max] ? $right:$max;
}
if($max!=$t){
swap($A,$max,$t);
Heapify($A,$n,$max);
}
}
//数组堆排序,从floor(n/2)开始,从后往前
function BuildHeap($A,$n){
for($i=floor($n/2);$i>=0;$i--){
Heapify($A,$n,$i);
}
return $A;
}
$A=[6,5,8,9,3,1];
$B=BuildHeap($A,5);
echo "original array:";
print_r($A);
echo "<br>";
echo "heap array:";
print_r($B);
php实现堆,将数组进行堆排序
最新推荐文章于 2023-05-28 11:19:59 发布