Сортировка одномерного массива — одна из наиболее интересный, на мой взгляд, задач программирования на начальном этапе.
Существует несколько алгоритмов сортировки. Наиболее просто реализуется сортировка методом пузырька.
Называется она так из-за схожести процесса сортировки с поднятием пузырька в воде. Число как бы всплывает пропорционально своей величине.
Для начала подключим необходимые библиотеки и определим стандартный поток ввода/вывода:
#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++)
Благодаря комментариям он видоизменился 😉