Информатика.-5
.pdf1
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
Федеральное государственное бюджетное образовательное учреждение высшего образования
Томский государственный университет систем управления и радиоэлектроники (ТУСУР)
Кафедра радиоэлектроники и защиты информации (РЗИ)
УТВЕРЖДАЮ Зав. кафедрой РЗИ
__________ А.С. Задорин
ИНФОРМАТИКА
Конспект лекций для студентов специальностей 11.03.01 «Радиотехника» и
11.03.02 «Инфокоммуникационные технологии и системы связи»
Разработчик доцент кафедры РЗИ
__________ Д.В. Дубинин "___"_________ 2016 г.
2016
2
Дубинин Д.В. Информатика. Конспект лекций: учебное пособие – Томск: Томский государственный университет систем управления и радиоэлектроники, 2016. – 73 с.
Конспект лекций по дисциплине «Информатика и информационные технологии» для студентов специальностей 11.03.01 «Радиотехника» и 11.03.02 «Инфокоммуникационные технологии и системы связи». В конспекте рассматриваются численные методы решения задач, которые наиболее часто встречаются в практике радиоинженеров.
©Дубинин Д.В., 2016.
©Томский государственный университет систем управления и радиоэлектроники, 2016.
|
|
|
3 |
|
|
ОГЛАВЛЕНИЕ |
|
1. |
Сортировка данных............................................................................................................... |
4 |
|
|
1.1 |
Сортировка подсчетом.................................................................................................. |
5 |
|
1.2 |
Сортировка вставками................................................................................................... |
6 |
|
1.3 |
Сортировка выбором..................................................................................................... |
8 |
|
1.4 |
Сортировка обменом................................................................................................... |
10 |
|
1.5 |
Сравнение алгоритмов сортировки ........................................................................... |
13 |
2. |
Численное решение уравнений.......................................................................................... |
15 |
|
|
2.1 |
Метод половинного деления (дихотомия) ................................................................ |
16 |
|
2.2 |
Метод хорд (ложного положения) ............................................................................. |
18 |
|
2.3 |
Метод Ньютона (касательных)................................................................................... |
19 |
|
2.4 |
Модифицированный метод Ньютона........................................................................ |
22 |
|
2.5 |
Метод секущих............................................................................................................ |
23 |
|
2.6 |
Метод итераций........................................................................................................... |
24 |
|
2.7 |
Эффективность численных методов решения уравнений....................................... |
27 |
3. |
Решение систем уравнений................................................................................................. |
28 |
|
|
3.1 |
Метод Крамера............................................................................................................. |
28 |
|
3.2 |
Метод Гаусса................................................................................................................ |
30 |
|
3.3 |
Итеративный метод Якоби......................................................................................... |
35 |
|
3.4 |
Итеративный метод Гаусса-Зейделя.......................................................................... |
36 |
4. |
Численное интегрирование ................................................................................................ |
38 |
|
|
4.1 |
Метод прямоугольников............................................................................................. |
39 |
|
4.2 |
Метод трапеций........................................................................................................... |
43 |
|
4.3 |
Метод парабол (Симпсона или Ньютона-Симпсона) .............................................. |
45 |
|
4.4 |
Метод Симпсона 3/8.................................................................................................... |
48 |
|
4.5 |
Метод Буля................................................................................................................... |
49 |
|
4.6 |
Сравнение различных методов по точности приближения..................................... |
49 |
|
4.7 |
Численное интегрирование методом Гаусса-Лежандра.......................................... |
50 |
|
4.8 |
Численное решение интеграла методом Монте-Карло............................................ |
55 |
5. Интерполяция и приближение полиномами..................................................................... |
58 |
||
|
5.1 |
Интерполяция алгебраическим полиномом.............................................................. |
58 |
|
5.2 |
Интерполяционный полином Лагранжа.................................................................... |
59 |
|
5.3 |
Интерполяционный полином Ньютона..................................................................... |
60 |
|
5.4 |
Интерполяция параболическим сплайном................................................................ |
62 |
|
5.5 |
Интерполяция кубическим сплайном........................................................................ |
65 |
|
5.6 |
Метод наименьших квадратов ................................................................................... |
68 |
|
5.7 |
Интерполяция тригонометрическим полиномом..................................................... |
72 |
4
1. Сортировка данных
Сортировка – один из основных алгоритмов обработки информации, состоящий в переупорядочении по нужному признаку заданной последовательности величин.
Наиболее полно алгоритмы сортировки изложены в книге Дональда Кнута «Искусство сортировки».
Постановка задачи: необходимо упорядочить N элементов R1, R2 ,..., RN , которые
называются записями. Каждая запись Rj имеет ключ K j , который управляет процессом
сортировки. Помимо ключа запись может содержать побочную информацию, которая не влияет на сортировку, но всегда остается в этой записи.
Отношение порядка < (меньше) на множестве ключей вводится таким образом, что для трех разных ключей a, b, c выполнялись следующие условия:
•справедливо одно и только одно соотношение a < b , a = b , a > b (закон трихотомии),
•если a < b и b < c , то a < c (закон транзитивности).
Эти два свойства определяют математическое понятие линейного упорядочения. Задача сортировки – найти такую перестановку записей p(1), p(2),..., p(N ) , после
которой ключи расположились в неубывающем порядке Kp(1) ≤ Kp(2) ≤... ≤ Kp( N ) .
Сортировка называется устойчивой, если она удовлетворяет дополнительному условию, что записи с одинаковыми ключами остаются в прежнем порядке, т.е.
p(i) < p( j) , если Kp(i) = Kp( j) и i < j .
Сортировку разделяют на два класса: внутреннюю, когда все записи хранятся в быстрой оперативной памяти, и внешнюю, когда они там не помещаются.
Эффективность алгоритма сортировки оценивается двумя показателями: количеством сравнений и количеством обменов.
Все известные алгоритмы сортировки данных можно разделить на четыре группы:
•сортировка подсчетом,
•сортировка вставками,
•сортировка посредством выбора,
•обменная сортировка.
Для объяснения особенностей того или иного алгоритма сортировки будет использоваться последовательность записей, ключи которых образуют последовательность, приведенную в таблице 6.1.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
Таблица 1.1 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
K1 |
K2 |
K3 |
K4 |
K5 |
K6 |
K7 |
K8 |
K9 |
K10 |
K11 |
K12 |
K13 |
K14 |
K15 |
K16 |
503 |
087 |
512 |
061 |
908 |
170 |
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.1 Сортировка подсчетом
Для сортировки методом подсчета записей R1, R2 ,..., RN по ключам K1, K2 ,..., KN
используется вспомогательный массив C(1),C(2),...,C(N ) . Изначально элементы массива
C(1),C(2),...,C(N ) равны нулю. Все ключи попарно сравниваются. Если ключ Ki больше ключа K j , то элемент C(i) увеличивается на единицу. В противном случае на единицу увеличивается элемент C( j) . После завершения алгоритма величина C( j) +1 определяет окончательное положение записи Rj .
Продемонстрируем изложенный алгоритм с помощью последовательности ключей, приведенных ранее.
Таблица 1.2
ключи |
503 |
087 |
512 |
061 |
908 |
170 |
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C (нач) |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C (i=N) |
0 |
0 |
0 |
0 |
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=N-1 |
0 |
0 |
0 |
0 |
2 |
0 |
2 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
13 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=N-2 |
0 |
0 |
0 |
0 |
3 |
0 |
3 |
0 |
0 |
0 |
0 |
0 |
0 |
11 |
13 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=N-3 |
0 |
0 |
0 |
0 |
4 |
0 |
4 |
0 |
1 |
0 |
0 |
0 |
9 |
11 |
13 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=N-4 |
0 |
0 |
1 |
0 |
5 |
0 |
5 |
0 |
2 |
0 |
0 |
7 |
9 |
11 |
13 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=N-5 |
1 |
0 |
2 |
0 |
6 |
1 |
6 |
1 |
3 |
1 |
2 |
7 |
9 |
11 |
13 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
C (i=2) |
6 |
1 |
8 |
0 |
15 |
3 |
14 |
4 |
10 |
5 |
2 |
7 |
9 |
11 |
13 |
12 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Приведем фрагмент программы сортировки подсчетом.
Фрагмент программы на языке Си
for(i=1; i<=n; i++) c[i]=0;
for(i=n; i>1; i--)
{
for(j=i-1; j>0; j--)
{
if (k[i]<k[j]) c[j]++; else c[i]++;
}
}
1.2 Сортировка вставками
6
Фрагмент программы на языке Паскаль
for i:=1 to n do c[i]:=0;
for i:=n downto 2 do begin
for j:=i-1 downto 1 do begin
if (k[i]<k[j])
then c[j]:=c[j]+1 else c[i]:=c[i]+1;
end end
Сортировка вставками основана на свойстве, которым пользуются игроки в карточной игре бридж (или кинг, преферанс). Перед рассмотрением записи Rj считается,
что предыдущие записи R1, R2 ,..., Rj−1 уже упорядочены. Запись Rj вставляется в
соответствующее место. Простейшая сортировка вставками является очевидной.
Пусть записи R1, R2 ,..., Rj−1 размещены так, что K1 ≤ K2 ≤... ≤ K j−1 . Сравнивая по
очереди K j с K j−1, K j−2 ,... до тех пор, пока не обнаружим, что запись Rj необходимо вставить между записями Ri и Ri+1 . Тогда записи Ri+1, Ri+2 ,..., Rj−1 сдвигаются, а запись Rj
занимает место (i +1) .
Продемонстрируем изложенный алгоритм с помощью последовательности ключей, приведенных ранее.
7
Таблица 1.3
ключи |
503 |
087 |
512 |
061 |
908 |
170 |
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
087 |
503 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
087 |
503 |
512 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
503 |
512 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
503 |
512 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
170 |
503 |
512 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
170 |
503 |
512 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
154 |
170 |
275 |
426 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Приведем фрагмент программы сортировки простыми вставками.
Фрагмент программы на языке Си |
Фрагмент программы на языке Паскаль |
|
for j:=2 to n do |
for(j=2; j<=n; j++) |
|
{ |
begin |
i=j-1; |
i:=j-1; |
key=j; |
key:=j; |
rc=r[j]; |
rc:=r[j]; |
do |
repeat |
{ |
if(key>k[i]) then break; |
if(key>k[i]) break; |
r[i+1]:=r[i]; |
r[i+1]=r[i]; |
i:=i-1; |
i--; |
until (i<>0); |
} while (i==0); |
r[i+1]=rc; |
r[i+1]=rc; |
end |
} |
|
|
|
Быстродействие алгоритма простых вставок можно повысить, применяя бинарные вставки и двухпутевые вставки. Суть бинарных вставок состоит в том, что при размещении записи R64 ключ K64 сравнивать не с K63, K62 ,…, а с ключом K32 . Если
K64 < K32 , то затем его необходимо сравнить с ключом K16 . Положение записи R64 можно
8
найти за шесть сравнений. Общее число сравнений для N вставляемых элементов можно снизить с N 2 / 4 до N log2 N .
Однако бинарные вставки решают задачу только наполовину. После того, как найдено место для записи Rj , необходимо передвинуть в среднем j / 2 записи. Пользуясь двухпутевыми вставками можно уменьшить это число вдвое. Суть алгоритма двухпутевых вставок состоит том, что первый элемент помещается в середину области вывода. Место для последующих элементов освобождается при помощи сдвигов влево или вправо, туда, куда удобнее. В таблице 6.4 показана сортировка двухпутевыми вставками.
Таблица 1.4
ключи |
503 |
087 |
512 |
061 |
908 |
170 |
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
087 |
503 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
087 |
503 |
512 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
503 |
512 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
503 |
512 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
170 |
503 |
512 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
170 |
503 |
512 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
154 |
170 |
275 |
426 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.3 Сортировка выбором
При сортировке записей R1, R2 ,..., RN методом простого выбора находится запись
Rj , имеющая наибольший ключ K j . После этого происходит обмен записей Rj и RN .
Далее наибольший ключ ищется у записей R1, R2 ,..., RN −1 . Найденная запись обменивается с записью RN −1 . Подобная операция выполняется (N −1) раз. В результате процедура сортировки выполнена.
Продемонстрируем изложенный алгоритм с помощью последовательности ключей, приведенных ранее.
9
Таблица 1.5
ключи |
503 |
087 |
512 |
061 |
908 |
170 |
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
087 |
512 |
061 |
703 |
170 |
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
087 |
512 |
061 |
703 |
170 |
765 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
087 |
512 |
061 |
703 |
170 |
677 |
275 |
653 |
426 |
154 |
509 |
612 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
087 |
512 |
061 |
612 |
170 |
677 |
275 |
653 |
426 |
154 |
509 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
087 |
512 |
061 |
612 |
170 |
509 |
275 |
653 |
426 |
154 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
087 |
512 |
061 |
612 |
170 |
509 |
275 |
154 |
426 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
503 |
087 |
512 |
061 |
426 |
170 |
509 |
275 |
154 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
····· |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
061 |
087 |
154 |
170 |
275 |
426 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Приведем фрагмент программы сортировки простым выбором.
Фрагмент программы на языке Си |
Фрагмент программы на языке Паскаль |
|
for j:=n downto 2 do |
for(j=n; j>1; j--) |
|
{ |
begin |
jmax=j; |
jmax:=j; |
for(i=j-1; i>0; i--) |
for i:=j-1 to 1 do |
if(k[i]>k[jmax]) jmax=i; |
if(k[i]>k[jmax])then jmax:=i; |
if(jmax<j) |
if(jmax<j) then |
{ |
begin |
r_temp=r[jmax]; |
r_temp:=r[jmax]; |
r[jmax]=r[j]; |
r[jmax]:=r[j]; |
r[j]=r_temp; |
r[j]:=r_temp; |
} |
end |
} |
end |
|
|
Число сравнений ключей в методе простого выбора фиксировано и равно (N −1) N / 2 . Поэтому алгоритм программно реализован с помощью двух циклических
операторов for.
10
1.4 Сортировка обменом
Рассмотрим два алгоритма, в которых сортировка записей проводится обменом. Простейший обменный алгоритм сортировки называется «пузырек». При сортировке записей R1, R2 ,..., RN с помощью алгоритма «пузырька» сравниваются ключи двух соседних записей Rj и Rj−1 . Если ключ K j меньше ключа K j−1 , записи Rj и Rj−1
обмениваются. Сначала сравнивают K1 и K2 , обменивая при необходимости R1 и R2 .
Затем K2 и K3 , K3 и K4 и т.д. После многократного выполнения этого процесса исходная последовательность будет упорядочена. В таблице 1.6 показана сортировка последовательности шестнадцати ключей, приведенных ранее.
Таблица 1.6
ключи |
503 |
087 |
|
512 |
061 |
908 |
|
170 |
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
087 |
503 |
|
061 |
512 |
170 |
|
897 |
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
087 |
061 |
|
503 |
170 |
512 |
|
275 |
653 |
426 |
154 |
509 |
612 |
677 |
765 |
703 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
061 |
087 |
|
170 |
503 |
275 |
|
512 |
426 |
154 |
509 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
061 |
087 |
|
170 |
275 |
503 |
|
426 |
154 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
061 |
087 |
|
170 |
275 |
426 |
|
154 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
061 |
087 |
|
170 |
275 |
154 |
|
426 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
061 |
087 |
|
170 |
154 |
275 |
|
426 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
061 |
087 |
|
154 |
170 |
275 |
|
426 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9 |
061 |
087 |
|
154 |
170 |
275 |
|
426 |
503 |
509 |
512 |
612 |
653 |
677 |
703 |
765 |
897 |
908 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Если ключи |
K1, K2 ,..., KN |
расположить вертикально, так чтобы первый ключ был |
внизу, а последний вверху, то записи с большими ключами постепенно «всплывают» и занимают соответствующее место. При первом прохождении запись с ключом 908 занимает последнее место. При втором проходе запись с ключом 897 занимает предпоследнее место и т.д. Поэтому данный алгоритм получил название «пузырек».
Приведем фрагмент программы сортировки «пузырьком».