Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2009, 12:05   #1
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию Сортировка односвяного динамического списка методом обмена

Доброго времени суток! Есть дин. список и требуется его отсортировать по возрастанию методом обмена, но в институте мы проходили только сортировку массивов, а не списков. Кому не жалко напишите процедурку на паскале, пожалуйста. Заранеее спасибо!
MyQwErTy вне форума Ответить с цитированием
Старый 09.05.2009, 12:08   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Что из себя представляет твой список? Списки разные бывают... Покажи его структуру.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 09.05.2009, 12:13   #3
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

Код:
spisok=^zveno;
     zveno=record
              el:stroka;
              ball:real;
              next:spisok;
     end;
сортировку надо проводить по "ball"
MyQwErTy вне форума Ответить с цитированием
Старый 09.05.2009, 22:36   #4
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

ну что, никто не знает??
MyQwErTy вне форума Ответить с цитированием
Старый 09.05.2009, 22:44   #5
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Сортировка списка выбором (в порядке возрастания).
Идея решения: пусть часть списка (по K-й указатель включительно)
отсортирована. Нужно найти в неотсортированной части списка
минимальный элемент и поменять местами с (K+1)-ым.

Код:
Type BT = real;
            U = ^Zveno;
            Zveno = Record
             Inf : BT;
             el:string;
             Next: U
            End;

var vsp0,vsp,k:U
     S:U;//указатель на начало списка.
     x:BT;
     srt:string; 
vsp0:=S;
while vsp0<>nil do
  begin
  vsp:=vsp0;
  K:=vsp0^.Next;
  while K<>nil do
   begin
    if K^.Inf<=vsp^.Inf then vsp:=K;
    K:=K^.Next;
   end;
  x:=vsp0^.Inf;
  str:=vsp0^.el;
  vsp0^.Inf:=vsp^.Inf;
  vsp0^.el:=vsp^.el;
  vsp^.Inf:=x;
  vsp^.el:=str;
  vsp0:=vsp0^.Next;
  end;
Сортировка по Inf.
Жми на весы!!!

Последний раз редактировалось Chudo4258; 09.05.2009 в 22:49.
Chudo4258 вне форума Ответить с цитированием
Старый 09.05.2009, 22:54   #6
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Возможно методы попутал. Расскажите суть "метода обмена".
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Старый 09.05.2009, 23:31   #7
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

метод обмена заключается в том, чтобы проводить сравнение пар соседних элементов
MyQwErTy вне форума Ответить с цитированием
Старый 10.05.2009, 11:07   #8
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Код:
Type BT = real;
            U = ^Zveno;
            Zveno = Record
             Inf : BT;
             el:string;
             Next: U
            End;

var vsp0,vsp,k:U
     S:U;//указатель на начало списка.
     x:BT;
     srt:string;

function pr(S:U):boolen;//проверяет отсортирован ли список
var vsp:U;
begin
 pr:=true;
 vsp:=S;
 while vsp^.next<>nil do
  begin
    if vsp^.Inf>vsp^.next^.inf then pr:=false
    vsp:=vsp^.next;
  end;

begin
 while not(pr(S)) do 
 begin
  vsp:=S;
   while vsp^.next<>nil do
     begin
      if vsp^.Inf>vsp^.next^.inf then
        begin
         x:=vsp^.Inf;
         str:=vsp^.el;
         vsp^.Inf:=vsp^.next^.Inf;
         vsp^.el:=vsp^.next^.el;
         vsp^.next^.Inf:=x;
         vsp^.next^.el:=str;
        end;
      vsp:=vsp^.next;
     end;
 end;
Тогда вот что-то в этом роде....
За правильность не ручаюсь, но суть такая должна быть.
Жми на весы!!!

Последний раз редактировалось Chudo4258; 10.05.2009 в 11:11.
Chudo4258 вне форума Ответить с цитированием
Старый 10.05.2009, 13:41   #9
MyQwErTy
Пользователь
 
Аватар для MyQwErTy
 
Регистрация: 16.10.2008
Сообщений: 73
По умолчанию

что-то не работает: прога запускается, и когда нужно отсортировать список, он выдает на экран ошибку и сразу закрывает, даже не успеваю посмотреть что он выдал
MyQwErTy вне форума Ответить с цитированием
Старый 10.05.2009, 14:07   #10
Chudo4258
Форумчанин
 
Аватар для Chudo4258
 
Регистрация: 19.02.2009
Сообщений: 622
По умолчанию

Попробуй сделать пошагово.
Перед последним END должно быть readln.
Разберись в задаче, возможно где-то в цикле vsp уходит за значение nil.
Жми на весы!!!
Chudo4258 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двунаправленного динамического списка lacost Общие вопросы C/C++ 3 08.05.2009 10:32
сортировка динамического списка new_sergei Помощь студентам 1 19.12.2008 00:36
Заполнение динамического списка из файла KORT Помощь студентам 2 01.05.2007 22:28