Сортировка массива методом пузырька в С++

Сортировка одномерного массива — одна из наиболее интересный, на мой взгляд, задач программирования на начальном этапе.
Существует несколько алгоритмов сортировки. Наиболее просто реализуется сортировка методом пузырька.
Называется она так из-за схожести процесса сортировки с поднятием пузырька в воде. Число как бы всплывает пропорционально своей величине.
Для начала подключим необходимые библиотеки и определим стандартный поток ввода/вывода:

#include <iostream>
#include <stdlib.h>
using namespace std;
  • Библиотека stdlib.h было подключена мной только для того чтобы тестировать массив, для использования функции — генератора случайных чисел — rand(). Если вы планируете заполнять массив вручную или считывать его откуда-то вам она не пригодиться

Для работы нам понадобятся: сам массив (я буду использовать массив целочисленных значений) и переменная для хранения значений при сравнивании элементов:

int a[10],tmp;

Заполним массив случайным образом при помощи функции rand числами от 0 до 100:

for (int i=0;i<9;i++) {
    a[i] = rand()%100;
    cout << a[i] << "\t";
}

Теперь же реализуем сам алгоритм сортировки:

for (int i=0;i<9;i++)
    for (int j=0; j<9-1-i;j++)  // см. комментарии
        if (a[j] > a[j+1]) {
     //рассматривается алгоритм сортировки по возрастанию 
           tmp = a[j];
           a[j] = a[j+1];
           a[j+1] = tmp;
       }

Алгоритм назван из-за схожести с поведением пузырька. Программа сравнивает по очереди каждый элемент с соседними и если необходимо меняет местами элементы. Таким образом вложенный цикл «двигает» элемент до его «места». Для более детального рассмотрения алгоритма воспользуйтесь этой страничкой . На ней массив выводится при каждом проходе главного цикла, это упрощает понимание алгоритма.

Осталось только вывести на экран полученный результат:

cout << "\nОтсортированный массив: \n";
for (int i=0;i<9;i++)
    сout << a[i] << "\t";
cout << "\n";

Последний cout вывод «перевод строки», для большей красоты 😉

Я получил такой результат:

Исходный массив:
3    6    7    5    3    5    6    2    9   
Отсортированный массив:
2    3    3    5    5    6    6    7    9

PS. Изначально вложенный цикл выглядел так:

for (int j=0; j<9;j++)  

Благодаря комментариям он видоизменился 😉

 

Похожий код:

Фото аватара
Алексей Петров

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

Оцените автора
Бла, бла код
Добавить комментарий