mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-26 04:56:06 +00:00
deploy
This commit is contained in:
@@ -4379,21 +4379,21 @@
|
||||
|
||||
<!-- Page content -->
|
||||
<h1 id="116">11.6 Сортировка слиянием<a class="headerlink" href="#116" title="Permanent link">¶</a></h1>
|
||||
<p><u>Сортировка слиянием (merge sort)</u> - это алгоритм сортировки, основанный на стратегии "разделяй и властвуй", который включает этапы "разделения" и "слияния", показанные на рисунке 11-10.</p>
|
||||
<p><u>Сортировка слиянием (merge sort)</u> - это алгоритм сортировки, основанный на стратегии «разделяй и властвуй», который включает этапы «разделения» и «слияния», показанные на рисунке 11-10.</p>
|
||||
<ol>
|
||||
<li><strong>Этап разделения</strong>: массив рекурсивно делится пополам, и задача сортировки длинного массива превращается в задачи сортировки более коротких массивов.</li>
|
||||
<li><strong>Этап слияния</strong>: когда длина подмассива становится равной 1, разделение завершается и начинается слияние; два коротких упорядоченных массива непрерывно объединяются в один более длинный упорядоченный массив, пока процесс не завершится.</li>
|
||||
<li><strong>Этап слияния</strong>: когда длина подмассива становится равной 1, разделение завершается и начинается слияние. Два коротких упорядоченных массива непрерывно объединяются в один более длинный упорядоченный массив, пока процесс не завершится.</li>
|
||||
</ol>
|
||||
<p><img alt="Этапы разделения и слияния в сортировке слиянием" class="animation-figure" src="../merge_sort.assets/merge_sort_overview.png" /></p>
|
||||
<p align="center"> Рисунок 11-10 Этапы разделения и слияния в сортировке слиянием </p>
|
||||
|
||||
<h2 id="1161">11.6.1 Алгоритм<a class="headerlink" href="#1161" title="Permanent link">¶</a></h2>
|
||||
<p>Как показано на рисунке 11-11, на этапе "разделения" массив рекурсивно разбивается сверху вниз по середине на два подмассива.</p>
|
||||
<p>Как показано на рисунке 11-11, на этапе «разделения» массив рекурсивно разбивается сверху вниз по середине на два подмассива.</p>
|
||||
<ol>
|
||||
<li>Вычислить середину массива <code>mid</code> и рекурсивно разделить левый подмассив (интервал <code>[left, mid]</code> ) и правый подмассив (интервал <code>[mid + 1, right]</code> ).</li>
|
||||
<li>Рекурсивно повторять шаг <code>1.</code> , пока длина подмассива не станет равной 1.</li>
|
||||
</ol>
|
||||
<p>Этап "слияния" снизу вверх объединяет левый и правый подмассивы в один упорядоченный массив. Следует заметить, что начиная с подмассивов длины 1, каждый подмассив в фазе слияния уже является упорядоченным.</p>
|
||||
<p>Этап «слияния» снизу вверх объединяет левый и правый подмассивы в один упорядоченный массив. Следует заметить, что начиная с подмассивов длины 1, каждый подмассив в фазе слияния уже является упорядоченным.</p>
|
||||
<div class="tabbed-set tabbed-alternate" data-tabs="1:10"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><input id="__tabbed_1_7" name="__tabbed_1" type="radio" /><input id="__tabbed_1_8" name="__tabbed_1" type="radio" /><input id="__tabbed_1_9" name="__tabbed_1" type="radio" /><input id="__tabbed_1_10" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1"><1></label><label for="__tabbed_1_2"><2></label><label for="__tabbed_1_3"><3></label><label for="__tabbed_1_4"><4></label><label for="__tabbed_1_5"><5></label><label for="__tabbed_1_6"><6></label><label for="__tabbed_1_7"><7></label><label for="__tabbed_1_8"><8></label><label for="__tabbed_1_9"><9></label><label for="__tabbed_1_10"><10></label></div>
|
||||
<div class="tabbed-content">
|
||||
<div class="tabbed-block">
|
||||
@@ -5046,10 +5046,10 @@
|
||||
<h2 id="1163">11.6.3 Сортировка связного списка<a class="headerlink" href="#1163" title="Permanent link">¶</a></h2>
|
||||
<p>Для связных списков сортировка слиянием имеет заметное преимущество перед другими алгоритмами сортировки: <strong>пространственную сложность задачи сортировки списка можно оптимизировать до <span class="arithmatex">\(O(1)\)</span></strong>.</p>
|
||||
<ul>
|
||||
<li><strong>Этап разделения</strong>: работу по разбиению списка можно реализовать с помощью "итерации" вместо "рекурсии", тем самым устранив расход памяти на стек вызовов.</li>
|
||||
<li><strong>Этап разделения</strong>: работу по разбиению списка можно реализовать с помощью «итерации» вместо «рекурсии», тем самым устранив расход памяти на стек вызовов.</li>
|
||||
<li><strong>Этап слияния</strong>: в связном списке добавление и удаление узлов требует только изменения ссылок (указателей), поэтому при слиянии двух коротких упорядоченных списков в один длинный упорядоченный список не нужно создавать дополнительный список.</li>
|
||||
</ul>
|
||||
<p>Детали реализации достаточно сложны; заинтересованные читатели могут обратиться к соответствующим материалам самостоятельно.</p>
|
||||
<p>Детали реализации достаточно сложны. Заинтересованные читатели могут обратиться к соответствующим материалам самостоятельно.</p>
|
||||
|
||||
<!-- Source file information -->
|
||||
|
||||
|
||||
Reference in New Issue
Block a user