как работает это пузырьковая сортировка

#include<iostream>
#include"Header.h"
using namespace std;
#define N 80
void funcsortupgrade2(int array[], int size) {
    funcrand(array, N);
    int temp;
    size_t n=N;
    do {
        size_t newn = 0;
        for (size_t i = 1; i < n; i++) {
                if (array[i-1] > array[i]) {
                    temp = array[i];
                    array[i] = array[i - 1];
                    array[i - 1] = temp;
            }
                newn = i;
        }
        n = newn;
    } while (n > 1);
}

Ответы (1 шт):

Автор решения: MBo

Это обычная пузырьковая сортировка, в которой вместо внешнего цикла for использован do-while.

Верхняя граница прохода n снижается от N до единицы, а обновляется она не в заголовке for, а просто как индекс предпоследнего обрабатываемого во внутреннем цикле элемента.

После каждого внутреннего цикла самый большой элемент текущей части встаёт на свое окончательной место в конце (пузырёк "всплывает")

Выгод по сравнению с двумя for нет.

Если newn = i; перенести выше фигурной скобки, то это даст несколько оптимизированный вариант - запоминается позиция последнего обмена, значит все элементы с бОльшими индексами уже на своих местах, и можно уменьшить обрабатываемую область не на единицу, а на несколько элементов.

→ Ссылка