Программа
TYPE BaseType=record
Field:integer;
end;
List=^Rec;
Rec=record
BaseRec:BaseType;
Next:List
end;
PROCEDURE SortList(var P:List); { Процедура сортировки списка }
Function SecondElementIsMin(First,Second:BaseType):boolean;
{ Функция определения минимального элемента }
begin
if Second.Field<First.Field
then SecondElementIsMin:=TRUE
else if Second.Field>First.Field
then SecondElementIsMin:=FALSE
else SecondElementIsMin:=Random(2)=Random(2)
end;
Var Ref, { Ссылка }
RefPred, { Ссылка на предыдущий элемент }
RefMin, { Ссылка на минимальный элемент }
RefPredMin { Ссылка на элемент предыдущий минимальному }
:List;
Begin
if P<>nil then { Если очередь не пустая, то - сортировка очереди }
begin
{ Начальное определение ссылок: }
RefMin:=P;
RefPredMin:=nil;
Ref:=RefMin;
while Ref^.Next<>nil do { Цикл просмотра очереди }
begin
RefPred:=Ref; { Переопределение ссылки на предыдущий элемент }
Ref:=Ref^.Next; { Переопределение ссылки на текщий элемент }
{ Сравнивание минимального элемента с текущим: }
if SecondElementIsMin(RefMin^.BaseRec,Ref^.BaseRec)
then begin { Переопределение ссылок минимального элемента: }
RefMin:=Ref;
RefPredMin:=RefPred
end
end;
if RefPredMin<>nil then
begin { Если минимальный элемент не первый, то - перестановка }
RefPredMin^.Next:=RefMin^.Next; { минимального элемента }
RefMin^.Next:=P; { в начало очереди }
P:=RefMin
end;
SortList(P^.Next) { Сортировка хвоста очереди }
end
End;
BEGIN
END.
Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию