То, что у вас есть, не Bubble Sort. Пузырьковая сортировка выглядит так:
do {
sorted = true
sweep through the array, swapping adjacent elements into sorted order
if we swap any elements, set sorted = false
} while (sorted == false)
Настоящая Bubble Sort не имеет внешнего предела с фиксированным числом итераций и не имеет внутреннего цикла, который выполняет меньше операций с увеличением количества итераций внешнего цикла. Да; эти аспекты дизайна глупы, но вот что такое Bubble Sort.
Существует более серьезный алгоритм, связанный с Bubble Sort, называемый Insertion Sort. Вид вставки такой:
dest_array = [] // start with empty destination array
for each element in source_array
insert element at appropriate spot in dest_array
Сортировка вставкой может быть реализована в одном массиве. Первоначально весь массив состоит из source_array [], а dest_array [] - это область нулевой длины в конце source_array []:
[...source_array...][] <- dest array
. Мы начинаем сортировку, удаляя элемент e из source_array [] прямо на границе, где начинается dest_array []:
[...source_array...][e][] <- [e] is removed from source_array
[...source_array...][ ] <- dest_array acquires an empty spot
[...source-array...][e] <- [e] is inserted into dest_array, in order
Мы продолжаем повторять это: source_array
продолжает уменьшаться, а отсортированный dest_array
увеличивается, пока не займет все пространство.
Insertion Sort имеет структуру, напоминающую ваш код: треугольная итерация с внешним циклом, который имеет фиксированное количество итераций, соответствующее количеству элементов, и внутренний цикл, который становится длиннее (так как dest_array
увеличивается дольше). Вставка каждого элемента в правильное место в dest_array
может быть выполнена серией перестановок смежных элементов.
То, что вы реализовали, называется Выбором сортировки. Вы постоянно выбираете самый высокий (или самый низкий) элемент из оставшегося source_array
раздела и перемещаете его до конца, тем самым создавая dest_array
раздел в порядке. У вас есть два варианта сортировки выбора: многократное перемещение самого высокого элемента в верхний раздел или многократное перемещение самого низкого элемента в нижний раздел. В любом случае этот верхний или нижний раздел займет весь массив, оставив его отсортированным.
Выбор сортировки, сортировка вставкой и сортировка по пузырькам - это разные алгоритмы. Bubble Sort - это своего рода шутка с двумя другими. Нет никакой причины использовать Bubble Sort вместо Selection или Insertion. Эти два являются респектабельными: они имеют свое применение, как сортировка небольшого количества вещей в крошечном пространстве. (Скажем, вам пришлось отсортировать небольшую таблицу значений в крошечный фрагмент машинного кода загрузчика или чего-то еще.)