Программа


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.

Бесплатные примеры программ
Примеры написанных программ
Помощь студентам по программированию