Выбор алгоритма сортировки

АлгоритмВремя (среднее)Время (худшее)ПамятьСтабильнаяКогда использовать
Insertion SortO(n²)O(n²)O(1)n < 20, почти отсортированные
QuickSortO(n log n)O(n²)O(log n)Общий случай, in-place
MergeSortO(n log n)O(n log n)O(n)Нужна стабильность, linked list
HeapSortO(n log n)O(n log n)O(1)Гарантия + O(1) памяти
sort.Slice (Go)O(n log n)O(n log n)O(log n)Практика — всегда

Используй sort.Slice — реализация Go (паттерн pdqsort) быстра на реальных данных.

Нужна стабильностьsort.SliceStable или MergeSort.

Малые данные (n < 20) — Insertion Sort быстрее из-за отсутствия накладных расходов.

Гарантированное O(n log n) без доп. памяти — HeapSort (редкий случай).

Частично отсортированные данные — Insertion Sort (O(n) на полностью отсортированных).

Go использует pdqsort (pattern-defeating quicksort) — гибрид:

  • QuickSort с медианой трёх для pivot
  • Insertion Sort для малых подмассивов (< 12 элементов)
  • HeapSort при деградации QuickSort

Это даёт O(n log n) на всех практических данных.


ЗаданиеСложность
1Упражнение 1easy
2Упражнение 2easy
3Упражнение 3medium