public function pop()
    {
        if (count($this->_heap) == 0) {
            return null;
        }

        $top = $this->_heap[0];
        $lastId = count($this->_heap) - 1;

        /**
         * Find appropriate position for last node
         */
        $nodeId  = 0;     // Start from a top
        $childId = 1;     // First child

        // Choose smaller child
        if ($lastId > 2  &&  $this->_less($this->_heap[2], $this->_heap[1])) {
            $childId = 2;
        }

        while ($childId < $lastId  &&
               $this->_less($this->_heap[$childId], $this->_heap[$lastId])
          ) {
            // Move child node up
            $this->_heap[$nodeId] = $this->_heap[$childId];

            $nodeId  = $childId;               // Go down
            $childId = ($nodeId << 1) + 1;     // First child

            // Choose smaller child
            if (($childId+1) < $lastId  
                && $this->_less($this->_heap[$childId+1], $this->_heap[$childId])
            ) {
                $childId++;
            }
        }

        // Move last element to the new position
        $this->_heap[$nodeId] = $this->_heap[$lastId];
        unset($this->_heap[$lastId]);

        return $top;
    }
public function pop()
    {
        if (count($this->_heap) == 0) {
            return null;
        }

        $top = $this->_heap[0];
        $lastId = count($this->_heap) - 1;

        /**
         * Find appropriate position for last node
         */
        $nodeId  = 0;     // Start from a top
        $childId = 1;     // First child

        // Choose smaller child
        if ($lastId > 2  &&  $this->_less($this->_heap[2], $this->_heap[1])) {
            $childId = 2;
        }

        while ($childId < $lastId  &&
               $this->_less($this->_heap[$childId], $this->_heap[$lastId])
          ) {
            // Move child node up
            $this->_heap[$nodeId] = $this->_heap[$childId];

            $nodeId  = $childId;               // Go down
            $childId = ($nodeId << 1) + 1;     // First child

            // Choose smaller child
            if (($childId+1) < $lastId  
                && $this->_less($this->_heap[$childId+1], $this->_heap[$childId])
            ) {
                $childId++;
            }
        }

        // Move last element to the new position
        $this->_heap[$nodeId] = $this->_heap[$lastId];
        unset($this->_heap[$lastId]);

        return $top;
    }
public function pop ( ) { if ( count ( $ this -> _heap ) == 0 ) { return null ; } $ top = $ this -> _heap [ 0 ] ; $ lastId = count ( $ this -> _heap ) - 1 ; /**
         * Find appropriate position for last node
         */ $ nodeId = 0 ; // Start from a top $ childId = 1 ; // First child // Choose smaller child if ( $ lastId > 2 && $ this -> _less ( $ this -> _heap [ 2 ] , $ this -> _heap [ 1 ] ) ) { $ childId = 2 ; } while ( $ childId < $ lastId && $ this -> _less ( $ this -> _heap [ $ childId ] , $ this -> _heap [ $ lastId ] ) ) { // Move child node up $ this -> _heap [ $ nodeId ] = $ this -> _heap [ $ childId ] ; $ nodeId = $ childId ; // Go down $ childId = ( $ nodeId << 1 ) + 1 ; // First child // Choose smaller child if ( ( $ childId + 1 ) < $ lastId && $ this -> _less ( $ this -> _heap [ $ childId + 1 ] , $ this -> _heap [ $ childId ] ) ) { $ childId ++ ; } } // Move last element to the new position $ this -> _heap [ $ nodeId ] = $ this -> _heap [ $ lastId ] ; unset ( $ this -> _heap [ $ lastId ] ) ; return $ top ; }
Removes and return least element of the queue

O(log(N)) time

@return mixed
Removes and return least element of the queue