Вы можете найти kth
самый большой элемент набора за O(n)
время с помощью алгоритма медианы медиан. Источник .
Когда у вас есть это значение, вы можете прочитать все значения из исходной кучи (не нужно извлекать, их порядок не имеет значения при чтении, только при записи вновые массивы. Это дает дополнительное преимущество, заключающееся в том, что они не мешают исходной куче (Yay.) и помещаются в большую или маленькую кучу, в зависимости от их отношения к значению kth
.Каждое извлечение O(1)
и происходит n
раз.Каждая вставка имеет значение O(lg n)
и встречается n
раз.
Total running time: n + n + n lg n = O(n lg n)
| | |
selection | inserts
extraction