Программа пузырьковой сортировки
Часто требуется расположить элементы массива по возрастанию или по убыванию. Это можно сделать с помощью следующей программы:
const int N=5;
int i,j,t,massiv[N];
cout<<RUS("Введите одномерный массив целых чисел:\n");
for(i=0;i<N;i++)cin>>massiv[i]; //ввод массива
for(i=N-1;i>0;i--) //начало сортировки
for(j=0;j<i;j++)
if(massiv[j]>massiv[j+1])
{
t=massiv[j]; //тело внутреннего цикла
massiv[j]=massiv[j+1]; //
massiv[j+1]=t; //
} //конец сортировки
cout<<RUS("\nМассив упорядоченный по возрастанию:\n");
for(i=0;i<N;i++) //вывод массива
cout<<"\nmassiv["<<i<<"] = "<<massiv[i]; //вывод массива
Собственно алгоритм выделен комментариями "начало сортировки" и "конец сортировки". Его суть заключается в последовательной перестановке соседних элементов массива с целью продвижения самого большого элемента в конец массива. Этот процесс поясняется на рис. 1.1. Один проход внутреннего цикла for …(по переменной j) перемещает в конец 1 элемент. На следующем проходе, благодаря уменьшению на 1 переменной внешнего цикла (i), установленный в конце массива элемент уже не рассматривается. Его рассмотрение не изменило бы результата, но выполнение операций требует времени, которое тратить впустую нецелесообразно. Так после выполнения N-2 внутренних циклов массив будет упорядочен по возрастанию.
Тело внутреннего цикла алгоритма решает задачу взаимной перестановки двух элементов массива. Задача решается перемещением значения переменных через третью вспомогательную переменную (t).
| | | | | ||||||||||||
| 1 |
|
|
|
Рис. 1.1
Перемещение самого большого элемента по массиву подобно всплытию пузырька воздуха в воде. Это и определило название алгоритма.
Алгоритм может иметь несколько модификаций. Например, упорядочение не по возрастанию, а по убыванию или перемещение элемента не в конец, а в начало массива. Для лучшего понимания рекомендуется реализовать эти модификации и сделать так, чтобы для пользователя все сообщения были одинаковы независимо от варианта программы.