堆排序(PHP实现)

来源:互联网 发布:jquery 1.4min.js下载 编辑:程序博客网 时间:2024/06/06 00:12
<?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;}


                                             
0 0
原创粉丝点击