php实现堆,将数组进行堆排序

<?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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值