Переделать программу так, чтобы сортировка в ней осуществлялась альтернативным способом - Pascal
Формулировка задачи:
Переделать программу так, чтобы сортировка в ней осуществлялась альтернативным способом (т.е. через поиск минимального числа и перемещение его в начало, как показано на рисунке 3).
По возможности(!) избавиться от одной или двух переменных в программе.
Дать пользователю выбор, отсортировать массив по возрастанию или по убыванию
Program Sortirovka_vyborom;
uses crt; // Подключение библиотеки для очистки экрана
const N=25;// Константа для максимального количества элементов в массиве
var i,j, // Переменные счётчиков в циклах
max, // Переменная для поиска максимального числа в массиве
posMax,// Переменная хранящая номер элемента с максимальным значением
lastPos,//Переменная для остановки цикла
temp // Переменная для хранения временных данных
: integer; // Все они integer, т.е. целые числа
Mass: array[1..N] of integer; // Массив из N элементов, тоже integer
begin // Начало программы
clrscr; // Очистка экрана
randomize; // Запуск полной рандомизации
for i:=1 to N do // Цикл заполняющий массив случайными числами
Mass[i] := random(100); // i-тый элемент массива получает случайное значение (от 0 до 99)
for i:=1 to N do // Цикл выводящий массив на экран
write (Mass[i]:3); // Вывод на экран i-того элемента массива с отступом
// ТЕПЕРЬ НАЧИНАЕТСЯ САМА СОРТИРОВКА
for j:=1 to N do // Внешний цикл. Задаёт количество полных проходов по массиву (совпадает с количеством его элементов)
begin // Начало внешнего цикла
max := Mass[1]; // Устанавливаем первым кандидатом на максимальное число – первое число в массиве
posMax := 1; // Задаём номер его позиции
lastPos := N-j+1; // Исключаем отсортированные числа из проверки
for i:=2 to lastPos do // Внутренний цикл. Задаёт количество проверяемых элементов массива за один проход (каждый следующий полный проход, проверяется на один элемент меньше)
begin // Начало внутреннего цикла
if max < Mass[i] then // Проверка: если кандидат на максимальное число меньше i-того элемента массива, то...
begin // Начало if
max := Mass[i]; // Сделать кандидатом на максимальное число i-тый элемент массива
posMax := i; // Запомнить номер нового кандидата на максимальное число
end; //конец if
end; // Конец внутреннего цикла
temp := Mass[posMax]; // Эта и последующие две строки – меняем местами значения максимально и «последнего» элемента
Mass[posMax] := Mass[lastPos];
Mass[lastPos] := temp;
end; // Конец внешнего цикла
// КОНЕЦ СОРТИРОВКИ
writeln; writeln; // Переход на новую строку (и пропуск ещё одной) для отделения неотсортированного массива от уже отсортированного
for i:=1 to N do // Цикл выводящий массив на экран
write (Mass[i]:3); // Вывод на экран i-того элемента массива с отступом
readln; // Остановка перед закрытием программы
end. // Конец программыРешение задачи: «Переделать программу так, чтобы сортировка в ней осуществлялась альтернативным способом»
textual
Листинг программы
const
n=25;
var
a: array [1..n] of Integer;
i, j, k, s, t: Integer;
begin
Randomize;
for i:=1 to n do a[i]:=Random(100);
for i:=1 to n do Write(a[i]:3); WriteLn;
Write('Направление сортировки (1-возрастание, иначе убывание): ');
ReadLn(s); if s<>1 then s:=-1;
for i:=1 to n-1 do begin
k:=i; for j:=k+1 to n do if s*a[j]<s*a[k] then k:=j;
t:=a[k]; a[k]:=a[i]; a[i]:=t;
end;
for i:=1 to n do Write(a[i]:3); WriteLn;
end.