Требуется отсортировать массив по неубыванию, используя сортировку слиянием.
Чтобы убедиться, что действительно используется сортировка слиянием, после каждого осуществленного слияния (то есть, когда соответствующий подмассив уже отсортирован!), требуется вывести индексы граничных элементов и их значения.
Pascal ABC
Код:
var
a: array [1..3] of string;
i, j, k: integer;
begin
readln(a[1],a[2],a[3]);
for i := 1 to 3 do
for j := 1 to 3 do
for k := 1 to 3 do
if (i <> j) and (i <> k) and (j <> k) then
writeln(a[i], ' ', a[j], ' ', a[k]);
end.
Пример работы:
Ввод:
КРАСНЫЕ
ЛАНДЫШИ
ЦВЕТУТ
Вывод:
КРАСНЫЕ ЛАНДЫШИ ЦВЕТУТ
КРАСНЫЕ ЦВЕТУТ ЛАНДЫШИ
ЛАНДЫШИ КРАСНЫЕ ЦВЕТУТ
ЛАНДЫШИ ЦВЕТУТ КРАСНЫЕ
ЦВЕТУТ КРАСНЫЕ ЛАНДЫШИ
ЦВЕТУТ ЛАНДЫШИ КРАСНЫЕ
// PascalABC.NET 3.6
type
TR = record
Имя, Отчество, Фамилия: string;
Возраст, НомерКласса: integer;
БукваКласса: char;
end;
function ПринятьСведения: TR;
begin
Result.Имя := ReadlnString('Имя:');
Result.Отчество := ReadlnString('Отчество:');
Result.Фамилия := ReadlnString('Фамилия:');
Result.Возраст := ReadlnInteger('Возраст:');
Result.НомерКласса := ReadlnInteger('Номер клвсса:');
Result.БукваКласса := ReadlnChar('Буква класса:');
end;
procedure ВывестиСведения(L: List<TR>);
begin
foreach var r in L do
Writeln(r.Имя+' '+r.Отчество+' '+r.Фамилия:40,
r.Возраст:4, r.НомерКласса+r.БукваКласса:4)
end;
begin
var p := new List<TR>;
var n := ReadlnInteger('Сколько учеников добавить?');
loop n do
p.Add(ПринятьСведения);
p := p.OrderByDescending(t -> t.Имя).ToList;
ВывестиСведения(p);
end.