Часто требуется расположить элементы
массива по возрастанию или по убыванию. Это можно сделать с помощью следующей
программы:
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).
![](http://progzad.ucoz.ru/_pu/0/s15228322.jpg)
Рис. 1.1
Перемещение самого большого элемента по
массиву подобно всплытию пузырька воздуха в воде. Это и определило название
алгоритма.
Алгоритм может иметь несколько
модификаций. Например, упорядочение не по возрастанию, а по убыванию или
перемещение элемента не в конец, а в начало массива. Для лучшего понимания
рекомендуется реализовать эти модификации и сделать так, чтобы для пользователя
все сообщения были одинаковы независимо от варианта программы.
|