Введение

Алгоритм сортировки

В информатике, сортировка выбором — это алгоритм сортировки сравнением на месте. Он имеет временную сложность O(n²), что делает его неэффективным для больших списков и, как правило, работает хуже, чем аналогичная сортировка вставками. Сортировка выбором отличается простотой и имеет преимущества в производительности по сравнению с более сложными алгоритмами в определенных ситуациях, особенно когда объем дополнительной памяти ограничен. Алгоритм разделяет входной список на две части: отсортированный подсписок элементов, который строится слева направо в начале (слева) списка, и подсписок оставшихся неотсортированных элементов, занимающих остальную часть списка. Изначально отсортированный подсписок пуст, а неотсортированный подсписок представляет собой весь входной список. Алгоритм продолжает работу, находя наименьший (или наибольший, в зависимости от порядка сортировки) элемент в неотсортированном подсписке, меняя его местами с крайним левым неотсортированным элементом (помещая его в отсортированный порядок) и сдвигая границы подсписка на один элемент вправо. Временная эффективность сортировки выбором квадратична, поэтому существует множество методов сортировки с лучшей временной сложностью, чем у сортировки выбором.

Сравнение с другими алгоритмами сортировки

Среди алгоритмов квадратичной сортировки (сортировочные алгоритмы со средней сложностью Θ(n2)) сортировка выбором почти всегда превосходит сортировку пузырьком и сортировку гномом. Сортировка вставками очень похожа в том, что после k-й итерации первые элементы в массиве оказываются отсортированными. Преимущество сортировки вставками заключается в том, что она просматривает только столько элементов, сколько необходимо для размещения s-го элемента, в то время как сортировка выбором должна просматривать все оставшиеся элементы, чтобы найти s-й элемент. Простой подсчет показывает, что сортировка вставками обычно выполняет примерно вдвое меньше сравнений, чем сортировка выбором, хотя количество сравнений может быть таким же или значительно меньше в зависимости от исходного порядка элементов в массиве. Для некоторых приложений реального времени может быть преимуществом то, что сортировка выбором работает одинаково независимо от исходного порядка массива, в то время как время выполнения сортировки вставками может существенно меняться. Однако чаще это является преимуществом для сортировки вставками, поскольку она работает гораздо эффективнее, если массив уже отсортирован или "близок к отсортированному". Хотя сортировка выбором предпочтительнее сортировки вставками с точки зрения количества операций записи (обмены против до обменов, при этом каждый обмен состоит из двух записей), это примерно в два раза больше теоретического минимума, достигаемого сортировкой циклами, которая выполняет не более n операций записи. Это может быть важно, если операции записи значительно дороже операций чтения, например, при использовании EEPROM или флэш-памяти, где каждая запись сокращает срок службы памяти. Сортировку выбором можно реализовать без непредсказуемых переходов для повышения эффективности предсказателя переходов процессора, находя местоположение минимального элемента с помощью кода, не содержащего переходов, а затем выполняя обмен безусловно. Наконец, на больших массивах сортировка выбором значительно уступает алгоритмам "разделяй и властвуй", таким как сортировка слиянием. Однако сортировка вставками или сортировка выбором обычно быстрее для небольших массивов (то есть, содержащих менее 10–20 элементов). Практичным способом оптимизации рекурсивных алгоритмов является переключение на сортировку вставками или сортировку выбором для "достаточно маленьких" подмассивов.