
Сортировка массива

Сортировка (упорядочивание) –
процесс размещения элементов заданного множества объектов в некотором определенном порядке, как правило, в порядке возрастания или убывания.
- p(i) ≤ p(i+1) – упорядоченность по возрастанию; p(i) ≥ p(i+1) – упорядоченность по убыванию.
- p(i) ≤ p(i+1) – упорядоченность по возрастанию;
- p(i) ≥ p(i+1) – упорядоченность по убыванию.

В основе алгоритма лежит обмен соседних элементов массива.
Каждый элемент массива, начиная с первого, сравнивается со следующим и, если он больше следующего, то элементы меняются местами.
Таким образом, элементы с меньшим значением продвигаются к началу массива, а элементы с большим значением – к концу массива (всплывают), поэтому этот метод иногда называют методом “пузырька”.
38
3
59
53
51
27
50
44
42
1
36
14
33
8
10
4
16
21
24
31
36
59
53
51
27
50
44
42
38
33
3
24
21
16
14
10
8
4
31
1
50
42
44
36
27
51
53
59
38
1
33
10
31
4
8
3
14
16
21
24
59
53
51
27
50
36
44
42
38
16
33
8
31
3
4
1
10
21
14
24
33
53
51
50
44
42
38
36
59
31
4
24
1
3
27
8
14
16
21
10
36
59
53
51
27
50
44
42
38
24
33
31
21
16
10
8
4
3
1
14
![Сортировка массива пузырьковым методом. В разделе описания данных задается массив размерностью 20 ячеек: a:array [1..20] of integer; Исходный массив заполняется через цикл с заданным числом повторений при помощи оператора случайных чисел: for i:=1 to 20 do a[i]:=random(10);](http://fsd.intolimp.org/html/2017/02/06/i_58982018e787a/img_phphUN0Xr_Sortirovka-massiva-moya_3.jpg)
Сортировка массива пузырьковым методом.
В разделе описания данных задается массив размерностью 20 ячеек:
a:array [1..20] of integer;
Исходный массив заполняется через цикл с заданным числом повторений при помощи оператора случайных чисел:
for i:=1 to 20 do
a[i]:=random(10);
![После заполнения массива случайными числами массив выводим на монитор (для самопроверки): for i:=1 to 20 do write (a[i]:3);](http://fsd.intolimp.org/html/2017/02/06/i_58982018e787a/img_phphUN0Xr_Sortirovka-massiva-moya_4.jpg)
После заполнения массива случайными числами массив выводим на монитор (для самопроверки):
for i:=1 to 20 do
write (a[i]:3);

Если будем пробегать по длине массива от первого до последнего
for i:=1 to 20 do,
и сравнивая каждый раз величины рядом стоящих элементов
if a[i]a[i+1] then
и меняя их местами в случае истинности условия (как -?)
![Перестановка элементов в массиве A[i] A[i+1] 2 3 1 P](http://fsd.intolimp.org/html/2017/02/06/i_58982018e787a/img_phphUN0Xr_Sortirovka-massiva-moya_6.jpg)
Перестановка элементов в массиве
A[i]
A[i+1]
2
3
1
P

Таким образом получим:
for i:=1 to 20 do
if a[i]a[i+1] then begin
p:=a[i];
a[i]:=a[i+1];
a[i+1]:=p;
end;
19

Прохождения за один раз недостаточно для полного упорядочивания массива. Необходимо установить признак завершения работы f (флаг), который будет принимать значение f:=0 каждый раз перед упорядочиванием массива. Если свершается хотя бы одна перестановка, признак (флаг) переходит в состояние 1. Так будет повторяться до тех пор, пока во время прохождения по массиву не произойдет ни одной замены, и переменная f не останется в 0 состоянии. Чтобы первый раз принудительно отправить массив на сортировку, мы флаг переводим в состояние 1

f:=1;
while f=1 do begin
f:=0;
for i:=1 to 19 do
if a[i]a[i+1] then begin
p:=a[i];
a[i]:=a[i+1];
a[i+1]:=p;
f:=1 ;
end;
end;
![Чтобы проверить правильность сортировки, необходимо вывести массив после сортировки на монитор: write('массив после обработки'); writeln; for i:=1 to 20 do write(a[i]:3);](http://fsd.intolimp.org/html/2017/02/06/i_58982018e787a/img_phphUN0Xr_Sortirovka-massiva-moya_10.jpg)
Чтобы проверить правильность сортировки, необходимо вывести массив после сортировки на монитор:
write('массив после обработки');
writeln;
for i:=1 to 20 do
write(a[i]:3);

Общий вид программы по сортировке массива примет вид:
program sortirovrk_puzir;
var
a:array [1..20] of integer;
i,f,p:integer;
begin
заполнение массива
for i:=1 to 20 do
a[i]:=random(10);
вывод на монитор массива до обработки
write ('массив до обработки');
writeln;
for i:=1 to 20 do
write (a[i]);
сортировка массива
f:=1;
while f=1 do begin
f:=0;
for i:=1 to 19 do
if a[i]a[i+1] then begin
p:=a[i];
a[i]:=a[i+1];
a[i+1]:=p;
f:=1 ;
end;
end;
вывод массива после сортировки writeln;
write('массив после обработки'); writeln;
for i:=1 to 20 do
write(a[i]);
End.

Сортировка методом «пузырька» (наиболее простой, но и самый неэффективный, медленный способ).

- Проверить работоспособность данной программы
- Выяснить, какие еще способы сортировки массива существуют
- Написать программу, которая сортирует массив из 40 элементов по убыванию методом «пузырька» и считает при этом количество произведённых перестановок .
- Стр.335 – 340, упр. 1-6.