mirror of
https://github.com/krahets/hello-algo.git
synced 2026-07-20 10:36:09 +00:00
deploy
This commit is contained in:
@@ -4357,13 +4357,13 @@
|
||||
|
||||
<!-- Page content -->
|
||||
<h1 id="1110">11.10 Поразрядная сортировка<a class="headerlink" href="#1110" title="Permanent link">¶</a></h1>
|
||||
<p>В предыдущем разделе была рассмотрена сортировка подсчетом: она хорошо подходит для случаев, когда объем данных <span class="arithmatex">\(n\)</span> велик, а диапазон значений <span class="arithmatex">\(m\)</span> сравнительно мал. Предположим теперь, что нужно отсортировать <span class="arithmatex">\(n = 10^6\)</span> номеров студентов, причем каждый номер представляет собой <span class="arithmatex">\(8\)</span>-значное число. Тогда диапазон данных <span class="arithmatex">\(m = 10^8\)</span> оказывается очень большим; сортировка подсчетом потребует огромного объема памяти, а поразрядная сортировка позволяет этого избежать.</p>
|
||||
<p>В предыдущем разделе была рассмотрена сортировка подсчетом: она хорошо подходит для случаев, когда объем данных <span class="arithmatex">\(n\)</span> велик, а диапазон значений <span class="arithmatex">\(m\)</span> сравнительно мал. Предположим теперь, что нужно отсортировать <span class="arithmatex">\(n = 10^6\)</span> номеров студентов, причем каждый номер представляет собой <span class="arithmatex">\(8\)</span>-значное число. Тогда диапазон данных <span class="arithmatex">\(m = 10^8\)</span> оказывается очень большим. Сортировка подсчетом потребует огромного объема памяти, а поразрядная сортировка позволяет этого избежать.</p>
|
||||
<p><u>Поразрядная сортировка (radix sort)</u> по своей основной идее совпадает с сортировкой подсчетом и тоже реализует сортировку через подсчет количества. При этом поразрядная сортировка использует соотношение между разрядами числа и последовательно сортирует данные по каждому разряду, получая итоговый упорядоченный результат.</p>
|
||||
<h2 id="11101">11.10.1 Алгоритм<a class="headerlink" href="#11101" title="Permanent link">¶</a></h2>
|
||||
<p>Рассмотрим пример со студенческими номерами: будем считать, что младший разряд имеет номер <span class="arithmatex">\(1\)</span> , а старший - номер <span class="arithmatex">\(8\)</span> . Тогда процесс поразрядной сортировки показан на рисунке 11-18.</p>
|
||||
<ol>
|
||||
<li>Инициализировать номер разряда <span class="arithmatex">\(k = 1\)</span> .</li>
|
||||
<li>Выполнить "сортировку подсчетом" по <span class="arithmatex">\(k\)</span>-му разряду студенческого номера. После этого данные будут упорядочены по <span class="arithmatex">\(k\)</span>-му разряду по возрастанию.</li>
|
||||
<li>Выполнить «сортировку подсчетом» по <span class="arithmatex">\(k\)</span>-му разряду студенческого номера. После этого данные будут упорядочены по <span class="arithmatex">\(k\)</span>-му разряду по возрастанию.</li>
|
||||
<li>Увеличить <span class="arithmatex">\(k\)</span> на <span class="arithmatex">\(1\)</span> и вернуться к шагу <code>2.</code> , продолжая процесс, пока сортировка не будет выполнена для всех разрядов.</li>
|
||||
</ol>
|
||||
<p><img alt="Процесс поразрядной сортировки" class="animation-figure" src="../radix_sort.assets/radix_sort_overview.png" /></p>
|
||||
@@ -5059,7 +5059,7 @@ x_k = \lfloor\frac{x}{d^{k-1}}\rfloor \bmod d
|
||||
<ul>
|
||||
<li><strong>Временная сложность равна <span class="arithmatex">\(O(nk)\)</span>, алгоритм не является адаптивным</strong>: пусть объем данных равен <span class="arithmatex">\(n\)</span> , числа записаны в системе счисления с основанием <span class="arithmatex">\(d\)</span> , а максимальное число разрядов равно <span class="arithmatex">\(k\)</span> . Тогда выполнение сортировки подсчетом для одного разряда требует <span class="arithmatex">\(O(n + d)\)</span> времени, а сортировка по всем <span class="arithmatex">\(k\)</span> разрядам требует <span class="arithmatex">\(O((n + d)k)\)</span> времени. Обычно <span class="arithmatex">\(d\)</span> и <span class="arithmatex">\(k\)</span> сравнительно малы, поэтому временная сложность стремится к <span class="arithmatex">\(O(n)\)</span> .</li>
|
||||
<li><strong>Пространственная сложность равна <span class="arithmatex">\(O(n + d)\)</span>, сортировка не выполняется на месте</strong>: как и в сортировке подсчетом, здесь требуются массивы <code>res</code> и <code>counter</code> длины <span class="arithmatex">\(n\)</span> и <span class="arithmatex">\(d\)</span> .</li>
|
||||
<li><strong>Стабильная сортировка</strong>: если сортировка подсчетом стабильна, то и поразрядная сортировка стабильна; если же сортировка подсчетом нестабильна, поразрядная сортировка не может гарантировать корректный результат.</li>
|
||||
<li><strong>Стабильная сортировка</strong>: если сортировка подсчетом стабильна, то и поразрядная сортировка стабильна. Если же сортировка подсчетом нестабильна, поразрядная сортировка не может гарантировать корректный результат.</li>
|
||||
</ul>
|
||||
|
||||
<!-- Source file information -->
|
||||
|
||||
Reference in New Issue
Block a user