Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Pascal / Delphi] Отсортировать по ключу список


Автор: 0day 19.5.2008, 20:04
Приветствую всех.
Есть следующая задача.
Имеется следующий однонаправленный кольцевой список:
Код

p_el = ^el;
el = record
    key:integer;
    inf:string;
    next:p_el;
  end;

Необходимо отсортировать его по значению ключа.
Все перерыл — нигде не написано про сортировку кольцевого..
Нашел алгоритм для простого однонаправленного, но как последний элемент в нем направить на первый, чтобы получилось кольцо — не представляю :(
Вот алгоритм:
Код

Function Sort(head : lptr) : lptr;
  var newh, max, prev, pmax, cur : lptr;
   begin        newh:=nil;         { выходной список - пустой }
   while head<>nil do { цикл, пока не опустеет входной список }
     begin   max:=head; prev:=head; { нач.максимум - 1-й эл-т }
     cur:=head^.next;     { поиск максимума во входном списке }
     while cur<>nil do begin
       if cur^.key>max^.key then begin
{ запоминается адрес максимума и адрес предыдущего эл-та }
         max:=cur; pmax:=prev;
     end;    prev:=cur; cur:=cur^.next; { движение по списку }
       end;        { исключение максимума из входного списка }
     if max=head then head:=head^.next
     else pmax^.next:=max^.next;
     { вставка в начало выходного списка }
     max^.next:=newh; newh:=max;
   end;  Sort:=newh;
  end;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)