mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-19 18:26:06 +00:00
deploy
This commit is contained in:
@@ -4359,16 +4359,16 @@
|
||||
<h1 id="117">11.7 Пирамидальная сортировка<a class="headerlink" href="#117" title="Permanent link">¶</a></h1>
|
||||
<div class="admonition tip">
|
||||
<p class="admonition-title">Tip</p>
|
||||
<p>Перед чтением этого раздела убедитесь, что вы уже изучили главу "Куча".</p>
|
||||
<p>Перед чтением этого раздела убедитесь, что вы уже изучили главу «Куча».</p>
|
||||
</div>
|
||||
<p><u>Пирамидальная сортировка (heap sort)</u> - это эффективный алгоритм сортировки, основанный на структуре данных "куча". Для его реализации можно использовать уже изученные нами "построение кучи" и "извлечение элементов из кучи".</p>
|
||||
<p><u>Пирамидальная сортировка (heap sort)</u> - это эффективный алгоритм сортировки, основанный на структуре данных «куча». Для его реализации можно использовать уже изученные нами «построение кучи» и «извлечение элементов из кучи».</p>
|
||||
<ol>
|
||||
<li>Подать на вход массив и построить из него мин-кучу; в этот момент минимальный элемент будет находиться в вершине кучи.</li>
|
||||
<li>Подать на вход массив и построить из него мин-кучу. В этот момент минимальный элемент будет находиться в вершине кучи.</li>
|
||||
<li>Непрерывно выполнять извлечение из кучи и по порядку записывать извлеченные элементы - так получится последовательность, отсортированная по возрастанию.</li>
|
||||
</ol>
|
||||
<p>Хотя этот метод и работоспособен, он требует дополнительного массива для хранения извлеченных элементов и потому расходует лишнюю память. На практике обычно используют более изящную реализацию.</p>
|
||||
<h2 id="1171">11.7.1 Алгоритм<a class="headerlink" href="#1171" title="Permanent link">¶</a></h2>
|
||||
<p>Пусть длина массива равна <span class="arithmatex">\(n\)</span> ; тогда процесс пирамидальной сортировки показан на рисунке 11-12.</p>
|
||||
<p>Пусть длина массива равна <span class="arithmatex">\(n\)</span>. Тогда процесс пирамидальной сортировки показан на рисунке 11-12.</p>
|
||||
<ol>
|
||||
<li>Подать на вход массив и построить из него макс-кучу. После этого максимальный элемент окажется в вершине кучи.</li>
|
||||
<li>Обменять элемент в вершине кучи (первый элемент) с элементом внизу кучи (последний элемент). После обмена длина кучи уменьшается на <span class="arithmatex">\(1\)</span> , а число уже отсортированных элементов увеличивается на <span class="arithmatex">\(1\)</span> .</li>
|
||||
@@ -4421,7 +4421,7 @@
|
||||
</div>
|
||||
<p align="center"> Рисунок 11-12 Шаги пирамидальной сортировки </p>
|
||||
|
||||
<p>В коде используется та же функция просеивания сверху вниз <code>sift_down()</code>, что и в главе "Куча". Важно помнить, что длина кучи уменьшается по мере извлечения максимального элемента, поэтому функции <code>sift_down()</code> нужно передавать параметр длины <span class="arithmatex">\(n\)</span> , чтобы указать текущую действительную длину кучи. Код приведен ниже:</p>
|
||||
<p>В коде используется та же функция просеивания сверху вниз <code>sift_down()</code>, что и в главе «Куча». Важно помнить, что длина кучи уменьшается по мере извлечения максимального элемента, поэтому функции <code>sift_down()</code> нужно передавать параметр длины <span class="arithmatex">\(n\)</span> , чтобы указать текущую действительную длину кучи. Код приведен ниже:</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="2:13"><input checked="checked" id="__tabbed_2_1" name="__tabbed_2" type="radio" /><input id="__tabbed_2_2" name="__tabbed_2" type="radio" /><input id="__tabbed_2_3" name="__tabbed_2" type="radio" /><input id="__tabbed_2_4" name="__tabbed_2" type="radio" /><input id="__tabbed_2_5" name="__tabbed_2" type="radio" /><input id="__tabbed_2_6" name="__tabbed_2" type="radio" /><input id="__tabbed_2_7" name="__tabbed_2" type="radio" /><input id="__tabbed_2_8" name="__tabbed_2" type="radio" /><input id="__tabbed_2_9" name="__tabbed_2" type="radio" /><input id="__tabbed_2_10" name="__tabbed_2" type="radio" /><input id="__tabbed_2_11" name="__tabbed_2" type="radio" /><input id="__tabbed_2_12" name="__tabbed_2" type="radio" /><input id="__tabbed_2_13" name="__tabbed_2" type="radio" /><div class="tabbed-labels"><label for="__tabbed_2_1">Python</label><label for="__tabbed_2_2">C++</label><label for="__tabbed_2_3">Java</label><label for="__tabbed_2_4">C#</label><label for="__tabbed_2_5">Go</label><label for="__tabbed_2_6">Swift</label><label for="__tabbed_2_7">JS</label><label for="__tabbed_2_8">TS</label><label for="__tabbed_2_9">Dart</label><label for="__tabbed_2_10">Rust</label><label for="__tabbed_2_11">C</label><label for="__tabbed_2_12">Kotlin</label><label for="__tabbed_2_13">Ruby</label></div>
|
||||
<div class="tabbed-content">
|
||||
<div class="tabbed-block">
|
||||
|
||||
Reference in New Issue
Block a user