Function: HEAP-INSERT

Source

(defun heap-insert (item heap)
  (with-comparator (heap-comparator heap)
    (labels ((insert-at (pos)
	       (let ((p (parent-index pos))
		     (key (heap-key-fn heap)))
		 (if (and (> pos 0)
			  (comp-> (funcall key (aref (heap-array heap) p))
				  (funcall key item)))
		     (progn (setf (aref (heap-array heap) pos)
				  (aref (heap-array heap) p))
			    (insert-at p))
		     (setf (aref (heap-array heap) pos)
			   item)))))
      (adjust-heap-array (incf (heap-size heap)) heap)
      (insert-at (1- (heap-size heap))))))
Source Context