Хорошо известно, что наихудшее время выполнения для heapsort - & Omega; (n lg n), но у меня возникают проблемы с тем, почему это так. В частности, первый шаг heapsort (создание max-heap) занимает время & Theta; (n). Затем следует n удалений кучи. Я понимаю, почему каждое удаление кучи занимает время O (lg n); перебалансировка кучи включает операцию пузырьков, которая занимает время O (h) на высоте кучи и h = O (lg n). Однако я не вижу, почему этот второй шаг должен взять & Omega; (n lg n). Кажется, что любой индивидуальный сброс кучи не обязательно приведет к тому, что node переместится вверх, чтобы пузырить всю дорогу вниз по дереву.
Мой вопрос: кто-нибудь знает хорошее доказательство нижней границы для наилучшего поведения heapsort?