废话少说,直接看代码
//堆排序
function duiSort($arr) {
for($i=count($arr); $i > 1; $i--) {
//构建堆
$temp = $arr[0];
$arr[0] = $arr[$i-1];
$arr[$i-1]= $temp;
}
print_r($arr);
}
//构建堆结构
//$len是构建堆的长度值
function heapSort(&$arr, $len) {//完全二叉树 父节点的两个子节点 2n+1 2n+2(数组下标0开始)
//找到最小的叶节点左值
$index = intval($len / 2) - 1; //得到最小非叶节点,下标从0开始,所以 - 1
for($index; $index >= 0; $index--) {
$j = $index * 2 + 1;
if( $j< $len -1 && isset($arr[$j + 1]) && $arr[$j+1] > $arr[$j]) { //叶节点哪个大和父节点做比较
$j++;
}
if($arr[$index] < $arr[$j]) { //父节点小于子节点进行交换值
$temp = $arr[$index];
$arr[$index] = $arr[$j];
$arr[$j] = $temp;
}
}
}