Запишите полный текст программы и выполните её на компьютере для рассмотренного в примере массива A. Разработайте подпрограммы max и swap для поиска максимального элемента и обмена значениями двух элементов. Модифицируйте программу сортировки выбором, использовав в ней одну или обе из названных подпрограмм. Рассмотренный массив: A = (0, 1, 9, 2, 4, 3, 6, 5).
Сначала запишем полный вариант программы по фрагменту из параграфа. Массив содержит восемь чисел из примера. Внутренний цикл ищет максимум начиная с очередной позиции i, а переменная x временно хранит её прежнее значение при обмене.
const N = ;
var
i, j, imax, x: integer;
A: array[ ..N] of integer;
begin
A[ ] := ; A[ ] := ; A[ ] := ; A[ ] := ;
A[ ] := ; A[ ] := ; A[ ] := ; A[ ] := ;
for i := to N - do
begin
imax := i;
for j := i + to N do
if A[j] > A[imax] then imax := j;
x := A[i];
A[i] := A[imax];
A[imax] := x
end;
for i := to N do write(A[i], ' ')
end.
Теперь вынесем поиск и обмен в подпрограммы. Для каждого i процедура max ищет индекс наибольшего элемента среди A[i], …, A[swap меняет местами два элемента через временную переменную t: без неё первое присваивание уничтожило бы старое значение A[i].
const N = ;
type TArray = array[ ..N] of integer;
var
A: TArray;
i, imax: integer;
procedure max(const B: TArray; first: integer; var pos: integer);
var j: integer;
begin
pos := first;
for j := first + to N do
if B[j] > B[pos] then pos := j
end;
procedure swap(var a, b: integer);
var t: integer;
begin
t := a;
a := b;
b := t
end;
begin
A[ ] := ; A[ ] := ; A[ ] := ; A[ ] := ;
A[ ] := ; A[ ] := ; A[ ] := ; A[ ] := ;
for i := to N - do
begin
max(A, i, imax);
swap(A[i], A[imax])
end;
for i := to N do write(A[i], ' ')
end.
max начинает с pos = first, поэтому сравнивает новые элементы с уже найденным наибольшим в неотсортированной части. После swap на позиции i стоит её максимум; следующий проход начинается с i +
| Проход i | Выбранный максимум | Массив после обмена |
|---|---|---|
После седьмого прохода все числа расположены по невозрастанию. Программа выводит ту же последовательность.
Для массива (
