Это своего рода гибрид между 'классической' пузырьковой сортировкой и выборочной сортировкой - но ближе к классической пузырьковой сортировке.
В классической пузырьковой сортировке внутренний цикл меняет соседние пары при обходе списка / массива.
В классической сортировке выбора внутренний цикл отслеживает наибольшее значение, которое он находит в оставшейся части списка, и заменяет его первым значением в той части списка, которую внутренний цикл в настоящее время рассматривает.
Сортировка, опубликованная в вопросе, похожа на сортировку Selection, в которой обмен всегда выполняется с первым значением в подсписке, которое рассматривает внутренний цикл. Он отличается от сортировки «Выбор» (и похож на классическую сортировку «Пузырьки») тем, что выполняет своп всякий раз, когда находит значение, превышающее текущий первый член подсписка внутреннего цикла.
Однако он отличается от классического типа Bubble тем, что не обменивается соседними парами. В классической Bubble-сортировке, когда внутренний цикл завершил работу с циклом, самый большой элемент списка отфильтровывался до нижней части списка, но в этом варианте самый маленький элемент отфильтровывался до верхней части подсистемы внутреннего цикла. -лист.
Я бы назвал это скорее вариацией классической сортировки Bubble, а не сортировки Selection, потому что рабочие характеристики сортировки в вопросе такие же, как у классической сортировки Bubble (O(n^2)
сравнения и O(n^2)
перестановки) в то время как сортировка выбора имеет O(n)
перестановок.
Но есть еще одно различие между классической сортировкой Bubble и этой в том, что классическая сортировка Bubble стабильна , тогда как сортировка в вопросе - нет. Рассмотрим следующий список элементов при выполнении сортировки. В сравнении используются только цифры - буквы используются только для различения элементов, имеющих одинаковый ранг. Диаграммы показывают выполненные операции свопинга (для краткости сравнения не показаны):
3.a 3.b 3.c 2.a 2.b 1.a
^ ^
+----------------+
2.a 3.b 3.c 3.a 2.b 1.a
^ ^
+----------------------------+
1.a 3.b 3.c 3.a 2.b 2.a
^ ^
+-----------------+
1.a 2.b 3.c 3.a 3.b 2.a
^ ^
+-----------------+
1.a 2.b 2.a 3.a 3.b 3.c
Обратите внимание, что в конце сортировки относительное положение элементов 2.a и 2.b изменилось, что указывает на нестабильную сортировку.