Дан массив чисел. Расставить их по убыванию.
Существует много алгоритмов для сортировки массивов. Рассмотрим один из них, который называется сортировкой с помощью прямого выбора (выделения). Суть его очень проста и может быть описана так.
1. Выбирается наибольший элемент.
2. Меняем его местами с первым элементом.
3. Повторяем процесс с оставшимися N — 1 элементами, N — 2 элементами и т. д., до тех пор, пока не останется один, самый маленький элемент.
Как видно из описания алгоритма, сама сортировка осуществляется с помощью двух вложенных циклов:
FOR J := 1 ТО N-1 DO
BEGIN
NEW := MAS[N];
K:=N;
FOR I := N DOWNTO J DO
IF MAS[I]>NEW THEN
BEGIN К := I;
NEW := MAS[I]
END;
MAS[K] := MAS[J];
MAS[J] := NEW;
END;
Цикл FOR J := 1 TO N-1 DO
определяет место J, на которое будет поставлен наибольший элемент, найденный в цикле: FOR I := N DOWNTO J DO.
PROGRAM PRG4_3;
CONST M = 100;
VAR MAS : ARRAY[1..M] OF INTEGER;
I, J, K, NEW, N : INTEGER;
BEGIN
WRITE(‘BBEДИTE РАЗМЕР МАССИВА N = ‘);
READLN(N);
WRITELN(‘BBEДИTE ‘, N, ‘ ЭЛЕМЕНТОВ МАССИВА’);
FOR I := 1 TO N DO
READ(MAS[I]);
WRITELN;
FOR J := 1 TO N-1 DO
BEGIN
NEW := MAS[N];
К :=N;
FOR I := N DOWNTO J DO
IF MAS[I]>NEW THEN
BEGIN
К := I;
NEW := MAS[I]
END;
MAS[K] := MAS[J];
MAS[J] := NEW;
END;
FOR I := 1 TO N DO
WRITE(MAS[I] : 4);
WRITELN
END.
Для решения задачи:
— формируем тело программы и описываем переменные;
— вводим длину массива N, значение элементов массива;
— последовательно, справа налево, просматриваем элементы и находим наибольший элемент NEW := MAS[I], запоминая его порядковый номер К := I;
— меняем местами первый элемент и найденный;
— выводим результат.
Переменные:
MAS — массив чисел;
N — размер массива;
I, J — переменные циклов;
К — порядковый номер наибольшего элемента;
NEW — значение наибольшего элемента.