1 added
1 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Сортировка - одна из самых распространённых операций над коллекциями. В Go для работы со срезами предусмотрены готовые функции в пакете slices, которые упрощают сортировку без необходимости писать собственные алгоритмы.</p>
1
<p>Сортировка - одна из самых распространённых операций над коллекциями. В Go для работы со срезами предусмотрены готовые функции в пакете slices, которые упрощают сортировку без необходимости писать собственные алгоритмы.</p>
2
<h2>Сортировка по возрастанию</h2>
2
<h2>Сортировка по возрастанию</h2>
3
<p>Для сортировки среза с элементами любого упорядоченного типа (например, int, string) используется функция slices.Sort():</p>
3
<p>Для сортировки среза с элементами любого упорядоченного типа (например, int, string) используется функция slices.Sort():</p>
4
<h2>Изменяется ли исходный срез?</h2>
4
<h2>Изменяется ли исходный срез?</h2>
5
<p>Важно помнить, что slices.Sort() изменяет исходный срез на месте. После вызова slices.Sort(nums) срез nums будет отсортирован, а новый срез не создаётся. Если нужно получить новый отсортированный срез, используйте slices.Sorted(), которая возвращает копию с отсортированными элементами:</p>
5
<p>Важно помнить, что slices.Sort() изменяет исходный срез на месте. После вызова slices.Sort(nums) срез nums будет отсортирован, а новый срез не создаётся. Если нужно получить новый отсортированный срез, используйте slices.Sorted(), которая возвращает копию с отсортированными элементами:</p>
6
<h2>Проверка, отсортирован ли срез</h2>
6
<h2>Проверка, отсортирован ли срез</h2>
7
<p>Иногда нужно проверить, находится ли срез в порядке возрастания. Для этого есть slices.IsSorted():</p>
7
<p>Иногда нужно проверить, находится ли срез в порядке возрастания. Для этого есть slices.IsSorted():</p>
8
<h2>Сортировка строк</h2>
8
<h2>Сортировка строк</h2>
9
<p>Срез строк сортируется аналогично:</p>
9
<p>Срез строк сортируется аналогично:</p>
10
<p>Сортировка выполняется в лексикографическом порядке (по Unicode-кодам символов).</p>
10
<p>Сортировка выполняется в лексикографическом порядке (по Unicode-кодам символов).</p>
11
<h2>Сортировка с пользовательской логикой</h2>
11
<h2>Сортировка с пользовательской логикой</h2>
12
<p>Если нужно задать собственное правило сортировки, можно использовать slices.SortFunc(). Например, сортировка строк по длине:</p>
12
<p>Если нужно задать собственное правило сортировки, можно использовать slices.SortFunc(). Например, сортировка строк по длине:</p>
13
<p>Функция-компаратор должна возвращать:</p>
13
<p>Функция-компаратор должна возвращать:</p>
14
<ul><li>Отрицательное значение, если a < b,</li>
14
<ul><li>Отрицательное значение, если a < b,</li>
15
<li>Ноль, если a == b,</li>
15
<li>Ноль, если a == b,</li>
16
<li>Положительное значение, если a > b.</li>
16
<li>Положительное значение, если a > b.</li>
17
</ul><h2>Обратный порядок</h2>
17
</ul><h2>Обратный порядок</h2>
18
<p>Чтобы отсортировать в обратном порядке, можно:</p>
18
<p>Чтобы отсортировать в обратном порядке, можно:</p>
19
<ol><li>Отсортировать по возрастанию.</li>
19
<ol><li>Отсортировать по возрастанию.</li>
20
<li>Развернуть срез с помощью slices.Reverse().</li>
20
<li>Развернуть срез с помощью slices.Reverse().</li>
21
</ol><h2>Минимальные и максимальные значения</h2>
21
</ol><h2>Минимальные и максимальные значения</h2>
22
<p>Пакет slices также предоставляет функции для нахождения минимального и максимального элементов:</p>
22
<p>Пакет slices также предоставляет функции для нахождения минимального и максимального элементов:</p>
23
<h2>Вывод</h2>
23
<h2>Вывод</h2>
24
<ul><li><strong>Функции slices.Sort() и slices.SortFunc() изменяют исходный срез.</strong></li>
24
<ul><li><strong>Функции slices.Sort() и slices.SortFunc() изменяют исходный срез.</strong></li>
25
-
<li>Если нужен новый отсортированный срез, используйте slices.Clone() перед сортировкой.</li>
25
+
<li>Если нужен новый отсортированный срез, используйте slices.Sorted() или slices.Clone() перед сортировкой.</li>
26
<li>Для кастомных правил сортировки - slices.SortFunc().</li>
26
<li>Для кастомных правил сортировки - slices.SortFunc().</li>
27
<li>Проверить порядок можно через slices.IsSorted().</li>
27
<li>Проверить порядок можно через slices.IsSorted().</li>
28
<li>Минимум и максимум вычисляются с помощью slices.Min() и slices.Max().</li>
28
<li>Минимум и максимум вычисляются с помощью slices.Min() и slices.Max().</li>
29
</ul>
29
</ul>