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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 12:45   #1
Joker_vad
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 42
По умолчанию Обменная сортировка

Здравствуйте. Делаю сортировку с динамическими переменными вот код
Код:
procedure sort;
var
i,k,f:integer; 
b,p:ptr;
m_b:string;
d_b,c_b,s_b:real;
begin
    clrscr;
    f:=0;
    p:=beg; 
    while p<>nil do
      begin
        inc(f);
        p:=p^.p;
      end;
    if f=0 then
      begin
        write('Невозможно произвести сортировку, т.к. нет данных!');
        readkey;
        exit;
      end;
    for k:=1 to f do
      begin
        p:=beg;
        for i:=1 to f-1 do
          begin
            b:=p;
            p:=p^.p;            
	    if b^.s>p^.s then
              begin 
		m_b:=b^.m;
		d_b:=b^.d;
		c_b:=b^.c;
		s_b:=b^.s;

		b^.m:=p^.m;
		b^.d:=p^.d;
		b^.c:=p^.c;
		b^.s:=p^.s;

		p^.m:=m_b;
		p^.d:=d_b;
		p^.c:=c_b;
		p^.s:=s_b;
	      end;
          end;
      end;
    writeln('Сортировка обменом исходных данных завершена');
    writeln('Записи в списке отсортированы относительно поля (итог)');
    writeln('Нажмите ENTER');
     readln;
    out;
    {RisMenu;}
end;
Кажется что это не совсем верно, для обменной сортировки. Можно ли как нибудь оптимизировать код или же верно и там?

Последний раз редактировалось Stilet; 11.11.2010 в 13:22.
Joker_vad вне форума Ответить с цитированием
Старый 12.11.2010, 11:15   #2
Joker_vad
Пользователь
 
Регистрация: 15.10.2010
Сообщений: 42
По умолчанию

Код:
procedure sort;
label m1;
var
b,p:ptr;
nam_b:string;
nom_b:string;
dat_b:integer;
itog_b,cen_b:real;
fl:boolean;
begin
    clrscr;
    f:=0;
    p:=beg;
    while p<>nil do
      begin
        inc(f);
        p:=p^.p;
      end;
    if f=0 then
      begin
        write('Невозможно произвести сортировку, т.к. нет данных!');
        readkey;
	exit;
      end;
      m1:
      fl:=false;
      p:=beg;
    while p^.p<>nil do begin
       b:=p^.p;
       if p^.itog>b^.Itog then begin
          nam_b:=b^.fio;
          nom_b:=b^.nom;
          dat_b:=b^.kol;
          cen_b:=b^.cen;
          itog_b:=b^.itog;

          b^.fio:=p^.fio;
          b^.nom:=p^.nom;
          b^.kol:=p^.kol;
          b^.cen:=p^.cen;
          b^.itog:=p^.itog;

          p^.fio:=nam_b;
          p^.nom:=nom_b;
          p^.kol:=dat_b;
          p^.cen:=cen_b;
          p^.itog:=itog_b;

          fl:=true;
       end;
       p:=p^.p;
    end;
    if fl then goto m1;
    writeln('Сортировка обменом исходных данных завершена');
    writeln('Записи в списке отсортированы относительно поля (итог)');
    writeln('Нажмите ENTER');
     readln;
    out;
    {RisMenu;}
end;
вот так наверно будет по удобнее
Joker_vad вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка Шелла и Шейкер-сортировка AleksandrMakarov Паскаль, Turbo Pascal, PascalABC.NET 11 11.03.2012 12:18
паскаль,одномерный массив,сортировка вставка,сортировка убывания,от максимального до конца немозг Помощь студентам 11 06.02.2010 21:57
Сортировка методом линейного выбора и "быстрая" сортировка Карол Помощь студентам 4 27.09.2009 19:52
Сортировка файлов в Explorer vs сортировка в Delphi mutabor Общие вопросы Delphi 11 04.09.2009 14:32
какая из трех сортировок (обменная,исчерпыванием,выбором) самая быстрая? Cyberbest Помощь студентам 2 26.04.2008 10:34