Объясните сортировку пузырьком

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int nums[10];
    int a, b, t;
    int size;
    size = 10;
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    for (t = 0; t < size; t++)
        nums[t] = rand() % 40;

    for (t = 0; t < size; t++)
    {
        cout << "Исходный массив: " << nums[t] << ' ' << endl;
    }

    //Мне непонятен код, который идёт ниже этого комментария
    for (a = 1; a < size; a++)
    {
        for (b = size - 1; b >= a; b--)
        {
            t = nums[b - 1];
            nums[b - 1] = nums[b];
            nums[b] = t;
        }
        cout << "Отсортированный массив: ";
        for (t = 0; t < size; t++)
            cout << nums[t] << ' ';
        return 0;
    }
}

Учись по книжке "Герберт Шилдт: С++ базовый курс", дошёл до сортировки массива.
Я так понял, это пузырьковая сортировка.
Читал и смотрел видео по данной сортировке, но так и не понял блок кода, который отвечает за сортировку.
Очень хочу понять его, ведь ловлю сильный тильт от непонимания.
Желательно дать раскрытый ответ. Заранее спасибо.


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

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

Данная реализация всего лишь перетаскивает последний элемент массива на первое место, оставляя остальную последовательность как есть.

В книге по Вашей ссылке есть строка

if(nums[b-1] > nums[b]) { // Элементы неупорядочены.

Обратите на нее внимание!

Если немного подправить Ваш код, то заработает:

#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
    int nums[10];
    int a, b, t;
    int size;
    size = 10;
    setlocale(LC_ALL, "Russian");
    srand(time(0));
    for (t = 0; t < size; t++)
        nums[t] = rand() % 40;

    cout << "Исходный массив: ";
    for (t = 0; t < size; t++)
    {
        cout << nums[t] << ' ';
    }
    cout << endl;

    //Теперь этот код реализует сортировку пузырьком
    for (a = 0; a < size; a++)
        for (b = 0; b < size - 1; b++)
            if (nums[b] > nums[b+1])
            {
                t = nums[b];
                nums[b] = nums[b + 1];
                nums[b + 1] = t;
            }
        cout << "Отсортированный массив: ";
        for (t = 0; t < size; t++)
            cout << nums[t] << ' ';
        return 0;
}

Т.е. Сравниваются два рядом стоящих элемента, и если первый больше второго, то они меняются местами.

→ Ссылка