最小堆排序:
1 首先利用最小堆的这种数据结构的特点,子节点不小于父节点的特性,最小堆构建后,根节点就是最小值
2 构建最小堆:子节点中最小的和父节点互换,然后对子节点的子树递归构建最小堆
3 最小堆构建完成后,就可以完成数据的抽取和排序
<?php
/**
* Created by IntelliJ IDEA.
* User: caoxiang
* Date: 2019-04-02
* Time: 14:15
*/
/**
* Class Heaps
* 最小堆排序min heap
* 每一次最小堆的构建,根节点都是最小值。只需在每次最小堆构建完成后,取出根节点。在将剩余的节点递归构建堆处理即可。
*/
class Heaps
{
public $data;
public $length;
public static $sorted_arr=[];
public function run($data){
$this->length = count($data);
$this->data = $data;
for ($i=0;$i<$this->length-1;$i++){
$this->min_heap($i);
}
}
/**
* @param $i
* 一个节点最小堆的构建
*/
public function min_heap($i){
$l = 2*($i+1)-1;
$r = 2*($i+1);
$smallest = $i;
if($l < $this->length && $t