从PHP5.3开始,PHP已经内置了MaxHeap的结构,见http://cn.php.net/manual/en/class.splmaxheap.php 以下纯属无聊: <?php class MaxHeap { protected $_data = array(); protected $_count = 0; public function insert($value) { $index = ++$this->_count; $this->_data[$index] = $value; while ($parentIndex = $this->getParentIndex($index)) { if ($this->_data[$parentIndex] < $this->_data[$index]) { $temp = $this->_data[$parentIndex]; $this->_data[$parentIndex] = $value; $this->_data[$index] = $temp; $index = $parentIndex; } else { break; } } } public function getParentIndex($index) { return floor($index/2); } public function popup() { if ($this->_count == 0) { return null; } $return = $this->_data[1]; $index = 1; $this->_data[$index] = $this->_data[$this->_count--]; while(true) { $child1Index = $index*2; $child2Index = $child1Index + 1; if ($child1Index > $this->_count) { break; } else { if ($child2Index > $this->_count) { $targetIndex = $child1Index; } else { $targetIndex = $this->_data[$child1Index] >= $this->_data[$child2Index] ? $child1Index : $child2Index; } $targetValue = $this->_data[$targetIndex]; if ($this->_data[$index] >= $targetValue) { break; } else { $this->_data[$targetIndex] = $this->_data[$index]; $this->_data[$index] = $targetValue; $index = $targetIndex; } } } return $return; } public function peek() { if ($this->_count == 0) { return null; } return $this->_data[1]; } } $heap = new MaxHeap(); $heap->insert(10); $heap->insert(1); $heap->insert(2); $heap->insert(4); $heap->insert(14); $heap->insert(12); $heap->insert(-2); $heap->insert(-12); $heap->insert(0); echo $heap->peek(); /* 14 */ $heap->popup(); $heap->popup(); $heap->popup(); $heap->popup(); $heap->popup(); $heap->popup(); echo $heap->peek(); /* 0 */