Идея линейной сортировки по не возрастанию заключается в том, чтобы, последовательно просматривая весь массив, отыскать наибольшее число и поместить его на первую позицию, обменяв его с элементом, который ранее занимал первую позицию. Затем просматриваются все остальные элементы массива и выполняется аналогичная операция по отбору из рассматриваемой части массива максимального элемента и обмену местами этого элемента и первого в рассматриваемой части и т.д.
Введем в разделе описание следующие целые переменные:
I-для указания позиции первого элемента в рассматриваемой части массива;
J-для указания позиции очередного сравниваемого с ним элемента;
N-для временного хранения значения первого элемента для обмена значениями с максимальным из рассматриваемой части массива;
L-параметр цикла при выводе текущего значения элементов массива в процессе сортировки для наблюдения происходящих в массиве наблюдений;
A-переменная, значение которой будет равно числу перестановок элементов.
Вначале запишем вывод исходного массива на экран:
Writeln (′Исходный массив:′);
for I:=1 to Count do Write (‘’,M[I]);
Writeln;
Переход началом сортировки установим значение счетчика итераций А, равно 0. для сортировки организуем два цикла for. Внешний цикл с параметром I, указывающим позицию первого элемента в не отсортированной части массива, и внутренний цикл с параметром J, указывающим позицию очередного, сравниваемого с первым, элемента не отсортированной части массива. Сравнение элементов запишем оператором:
if M[I]<M[J] then
begin
N:= M[I];
M[I]:= M[J];
M[J]:=N;
end;
Если условие M[I]<M[J] выполняется, т.е. в не отсортированной части массива найден элемент, больший, чем первый, то обменять местами эти элементы. Обмен осуществляется следующим образом: сначала значение M[i] запоминается в переменой N, затем значение элемента массива из J-й позиции записывается в 1-го позицию, а после этого в J-ю позицию массива записывается значение переменной N. Для наблюдения изменений состояния массива после каждой перестановки зададим цикл вывода значений всех элементов массива и напечатаем текущее значение числа перестановок элементов А следующим образом:
for L:=1 to Count do Write (‘’,M[L]); Writeln(′Число итераций=′,А);
Полный текст программы линейной сортировки массива М по невозрастанию может быть записан так:
Program Sort Lin; {Линейная сортировка по невозрастанию}