В наше время преподаватели программирования во многих вузах России становятся всё более требовательнее, и при сортировке линейных однонаправленных (не только) списков просят работать не с содержимым полей данных, а с самими указателями, поэтому я считаю, что данная тема будет актуальной.



Сортировка списка выбором

описание типов:

Type
 tdata=string[15]; {может быть любой из известных типов}
 tlist=^list;
  list=record
  data:tdata;
  sled:tlist
  end;



процедура создания списка
(обязательно с первым "пустым" элементом
для более удобной работы со списком при сортировке,
информация считывается построчно из текстового файла):

Procedure MakeList(var f:text; var first:tlist);
 var
  ukspis:tlist;
 Begin
  new(first);
  new(first^.sled);
  ukspis:=first^.sled;
  readln(f,ukspis^.data);
  while not eof(f) do
   begin
    new(ukspis^.sled);
    ukspis:=ukspis^.sled;
    readln(f,ukspis^.data);
    ukspis^.sled:=nil;
   end;
 end;



процедура сортировки:

Procedure SortList_Choice(first:tlist);
 Var
  ukspis,firstnonsort,ukmin:tlist;

 Procedure obmen(var uksp1,uksp2,first:tlist);
  Var
   uk1,uk2,uk3:tlist;
  Begin
   uk3:=first;
   while uk3^.sled <> uksp1 do uk3:=uk3^.sled;

   uk2:=first;
   while uk2^.sled <> uksp2 do uk2:=uk2^.sled;

   uk1:=uk2^.sled;
   uk2^.sled:=uk3^.sled;
   uk3^.sled:=uk1;

   uk1:=uksp1^.sled;
   uksp1^.sled:=uksp2^.sled;
   uksp2^.sled:=uk1;

   uk1:=uksp1;
   uksp1:=uksp2;
   uksp2:=uk1;
  end; {obmen}

 Begin
  firstnonsort:=first^.sled;
  ukmin:=first^.sled;
  ukspis:=firstnonsort;
  while firstnonsort <> nil do
   Begin
    ukspis:=firstnonsort;
    ukmin:=ukspis;
    while ukspis <> nil do
     Begin
      if ukspis^.data < ukmin^.data then ukmin:=ukspis;
      ukspis:=ukspis^.sled
     end;
    obmen(firstnonsort,ukmin,first);
    firstnonsort:=firstnonsort^.sled
   end
 end;



P.S. Все коды написаны лично мной (без использования ресурсов интернета), проверены на TurboPascal и отлично работают! Прикреплён исходник для самостоятельной проверки!
Нажмите для просмотра прикрепленного файла