Все темы
33

Сортировка: раз за разом берём наименьшее

Tier 1Закрыто

Где применяется

1. Задача

У тебя список чисел в случайном порядке, а нужен он от меньшего к большему. В лобби игры пять игроков со счётом 40, 15, 27, 8 и 31. Ты хочешь построить таблицу лидеров по порядку, от меньшего счёта к большему.

До сих пор ты искал в списке одно значение. Теперь нужно упорядочить весь список. Самый простой способ сортировки: раз за разом задавать один и тот же вопрос. Какое число самое маленькое среди тех, что ещё не поставлены на место?

Отвечай на этот вопрос снова и снова, и список окажется отсортирован.

Этот шаг из платной части

Бесплатные шаги в начале курса (их 33) открыты всем: урок, задача и тесты. Этот шаг открывается с полным доступом. Начни с бесплатного аккаунта и бесплатных шагов.

Завести бесплатный аккаунтПосмотреть, что входит
Сортировка вставками на шести числах
insertionSort([5, 2, 4, 6, 1, 3])
arr
5
2
4
6
1
3
key = -shifts = 0

Сортируем [5, 2, 4, 6, 1, 3] вставками. Левая часть уже отсортирована; в начале это одно число 5.

Гонка скорости
Сортировка выбором, вставками и слиянием на одних и тех же 40 перемешанных числах

Одна операция: одно сравнение или одно перемещение. За каждый кадр все дорожки делают одинаковое число операций, поэтому медленная отстаёт.

Сортировка выбором O(n²)
операций: 0
Сортировка вставками O(n²)
операций: 0
Сортировка слиянием O(n log n)
операций: 0

 

А если чисел больше

Операции для n чисел и примерное время при 100 миллионах простых операций в секунду. Это оценка по тому же счёту, а не замер.

n = 1 000
Сортировка выбором500,5 тыс. · 5 мс
Сортировка вставками501,5 тыс. · 5 мс
Сортировка слиянием19,9 тыс. · меньше 1 мс
n = 100 000
Сортировка выбором5 млрд · 50 с
Сортировка вставками5 млрд · 50 с
Сортировка слиянием3,3 млн · 33 мс
n = 10 000 000
Сортировка выбором50 трлн · 5,8 дн.
Сортировка вставками50 трлн · 5,8 дн.
Сортировка слиянием465,1 млн · 4,7 с

Как узнать

Элементарные сортировки (выбором, пузырьком, вставками) (Elementary sorts (selection, bubble, insertion))

Эти слова в условии значат этот паттерн

  • n маленькое (десятки или пара сотен)
  • массив уже почти отсортирован
  • сортировка на месте с O(1) дополнительной памяти
  • учебный/собеседовательный вопрос о механике сортировки
  • важна стабильность, а простота приемлема

Похоже, но не то

n примерно до 5000 нормально при O(n в квадрате). На почти отсортированных данных вставки дают O(n).

На LeetCode

Сортировка выбором слишком медленная для больших тестов LeetCode, поэтому здесь задачи с маленьким n, до нескольких тысяч. Нужно упорядочить короткий список или сравнить список с его отсортированной копией.

Мы используем необходимые куки для работы сайта (вход и язык). Если ты согласишься, мы также загрузим Google Analytics, чтобы видеть, какие страницы читают, и Google reCAPTCHA для защиты форм обратной связи и сообщений об ошибке от спама. Политика конфиденциальности