<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Как работает сортировка массива по возрастанию]]></title><description><![CDATA[<p dir="auto">Вы когда ни будь задумывались как работает сортировка массива изнутри? Мы все давным давно привыкли и даже не задумываемся над такими вещами, но я все же хочу осветить работу нашу любимого <strong>JavaScript</strong> под капотом.</p>
<p dir="auto">Начнем разбираться, у нас есть массив цифры и нам нужно его отсортировать по возрастанию, как мы будем это делать? Конечно же используем <code>.sort()</code> :</p>
<pre><code class="language-js">const nums = [40, 100, 1, 5, 25, 10];
nums.sort((a, b) =&gt; a - b);
console.log(nums); // [1, 5, 10, 25, 40, 100]
</code></pre>
<p dir="auto">Казалось бы вот и все массив отсортирован по возрастанию, но как же это работает изнутри и как функция <code>.sort()</code> понимает с чем ей необходимо работать.</p>
<p dir="auto">В методе <code>sort()</code> аргументы <code>a</code> и <code>b</code> - это два конкретных элемента массива, которые <strong>JavaScript</strong> берет для попарного сравнения в текущий момент работы алгоритма сортировки.</p>
<p dir="auto">Алгоритм сортировки «под капотом» (часто <strong>QuickSort</strong> или <strong>Timsort</strong>, в зависимости от браузера) проходит по массиву и постоянно задает вопрос: «Кто из этих двоих должен стоять раньше?».</p>
<p dir="auto"><strong>Как это работает в</strong> <code>(a, b) =&gt; a - b</code></p>
<p dir="auto">Функция должна вернуть число. Знак этого числа (плюс, минус или ноль) говорит сортировщику, что делать с <code>a</code> и <code>b</code>.</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Результат выражения <code>a</code> - <code>b</code></th>
<th>Значение</th>
<th>Действие сортировщика</th>
</tr>
</thead>
<tbody>
<tr>
<td>Отрицательное (<code>&lt; 0</code>)</td>
<td><code>a</code> меньше <code>b</code></td>
<td>Оставляет <code>a</code> перед <code>b</code> (индекс <code>a</code> &lt; индекса <code>b</code>)</td>
</tr>
<tr>
<td>Положительное (<code>&gt; 0</code>)</td>
<td><code>a</code> больше <code>b</code></td>
<td>Меняет их местами, ставит <code>b</code> перед <code>a</code></td>
</tr>
<tr>
<td>Ноль (<code>0</code>)</td>
<td><code>a</code> равно <code>b</code></td>
<td>Оставляет их порядок без изменений (в стабильных сортировках)</td>
</tr>
</tbody>
</table>
<p dir="auto">А теперь на пальцах:<br />
Допустим, JS сравнивает пару 100 и 5:</p>
<ol>
<li><code>a = 100</code>, <code>b = 5</code>.</li>
<li>Считаем <code>a - b</code>: <code>100 - 5 = 95</code>.</li>
<li>Результат <code>95</code> (положительное число).</li>
<li>Вывод: «Ага, <code>a</code> больше, значит, он “тяжелее” и должен уйти вправо (в конец)». 5 встанет перед 100.</li>
</ol>
<p dir="auto">Если сравнивает 5 и 25:</p>
<ol>
<li><code>a = 5</code>, <code>b = 25</code>.</li>
<li>Считаем <code>a - b</code>: <code>5 - 25 = -20</code>.</li>
<li>Результат <code>-20</code> (отрицательное число).</li>
<li>Вывод: «<code>a</code> меньше, он “легче”, пусть стоит слева (в начале)». Порядок сохраняется.</li>
</ol>
<p dir="auto">Таким образом, вычитание - это просто математический трюк, чтобы быстро получить нужное отрицательное или положительное число. Вот так вот и работает сортировка по возрастанию и убыванию.<br />
Кстати если нужна сортировка по убыванию нужно поменять местами <code>a</code> и <code>b</code> вот так:</p>
<pre><code class="language-js">nums.sort((a, b) =&gt; b - a);
</code></pre>
]]></description><link>https://forum.exlends.ru/topic/407/kak-rabotaet-sortirovka-massiva-po-vozrastaniyu</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:52:15 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/407.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 29 Jan 2026 09:24:54 GMT</pubDate><ttl>60</ttl></channel></rss>