Объясните сортировку пузырьком
#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 шт):
Данная реализация всего лишь перетаскивает последний элемент массива на первое место, оставляя остальную последовательность как есть.
В книге по Вашей ссылке есть строка
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;
}
Т.е. Сравниваются два рядом стоящих элемента, и если первый больше второго, то они меняются местами.