Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на Delphi и Lazarus


РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты в разделе

zdwork
Статус: 6-й класс
Рейтинг: 870
∙ повысить рейтинг »
puporev
Статус: Профессионал
Рейтинг: 80
∙ повысить рейтинг »
Асмик Гаряка
Статус: Советник
Рейтинг: 0
∙ повысить рейтинг »

∙ Pascal / Delphi / Lazarus

Номер выпуска:1782
Дата выхода:20.10.2019, 08:15
Администратор рассылки:Зенченко Константин Николаевич (Старший модератор)
Подписчиков / экспертов:34 / 37
Вопросов / ответов:1 / 1

Консультация # 196680: Здравствуйте! Прошу помощи в следующем вопросе: Разработать алгоритм сортировки естественным слиянием. Отсортировать с помощью него массив. Pascal...

Консультация # 196680:

Здравствуйте! Прошу помощи в следующем вопросе:

Разработать алгоритм сортировки естественным слиянием. Отсортировать с помощью него
массив.

Pascal

Дата отправки: 15.10.2019, 08:13
Вопрос задал: rail (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Зенченко Константин Николаевич (Старший модератор):

Здравствуйте, rail!

© Цитата: Интуит
К наиболее известным алгоритмам внешних сортировок относятся:

сортировки слиянием (простое слияние и естественное слияние);
улучшенные сортировки (многофазная сортировка и каскадная сортировка).


Код в приложении:
Код (Pascal) :: выделить код
const 
  n0:string='inpData.dat';
  n1:string='File1st.dat';
  n2:string='File2nd.dat';
  a:array[1..16]of integer=(59,30,99,28,27,87,65,98,25,29,92,88,73,84,81,41);
type 
  tF=file of integer;
var 
  f0,f1,f2:tF;{}
  a1,a2:integer;{} 
  b:boolean;
  c1,c2:integer;{}
begin
  assign(f0,n0);assign(f1,n1);assign(f2,n2);
  rewrite(f0);
  for c1:=1 to 16 do write(f0,a[c1]);
  close(f0);
  repeat
    reset(f0);rewrite(f1);rewrite(f2);
    read(f0,a1,a2);b:=true;
    repeat
      if b then write(f1,a1) else write(f2,a1);
      if a1>a2 then b:= not b;
      a1:=a2;
      read(f0,a2);
    until EOF(f0);
    if b then write(f1,a1) else write(f2,a1);
    if a1>a2 then b:=not b;
    if b then write(f1,a2) else write(f2,a2);
    close(f0);close(f1);close(f2);
  {} 
    writeln('control output before sort:');
    reset(f0);reset(f1);reset(f2);
    write(FileSize(f0):6,' ':3);while not EOF(f0)do begin read(f0,a1);write(a1:3)end;writeln;
    write(FileSize(f1):6,' ':3);while not EOF(f1)do begin read(f1,a1);write(a1:3)end;writeln;
    write(FileSize(f2):6,' ':3);while not EOF(f2)do begin read(f2,a1);write(a1:3)end;writeln;
    c1:=FileSize(f1);c2:=FileSize(f2);
    close(f0);close(f1);close(f2);
    if(c1<>0)and(c2<>0)then 
      begin 
        rewrite(f0);reset(f1);reset(f2);
        while(not EOF(f1))and(not EOF(f2))do 
          begin 
            c1:=-32768;c2:=-32768;
            read(f1,a1);read(f2,a2);
            while(c1<=a1)and(c2<=a2)and(not EOF(f1))and(not EOF(f2))do 
              if a1<=a2 then 
                begin 
                  write(f0,a1);
                  c1:=a1;
                  read(f1,a1) 
                end 
                else 
                  begin 
                    write(f0,a2);
                    c2:=a2;
                    read(f2,a2) 
                  end;
            while(c1<=a1)and(not EOF(f1))do 
              begin 
                write(f0,a1);
                c1:=a1;
                read(f1,a1) 
              end;
            while(c2<=a2)and(not EOF(f2))do 
              begin 
                write(f0,a2);
                c2:=a2;
                read(f2,a2) 
              end;
            while not EOF(f1)do 
              begin 
                write(f0,a1);
                read(f1,a1) 
              end;
            while not EOF(f2)do 
              begin 
                write(f0,a2);
                read(f2,a2) 
              end;
            if a1<=a2 then write(f0,a1,a2) 
                      else write(f0,a2,a1);
          end;
        close(f0);close(f1);close(f2);
        reset(f0);reset(f1);reset(f2);
        writeln('control output after sort');
        write(FileSize(f0):6,' ':3);while not EOF(f0)do begin read(f0,a1);write(a1:3)end;writeln;
        write(FileSize(f1):6,' ':3);while not EOF(f1)do begin read(f1,a1);write(a1:3)end;writeln;
        write(FileSize(f2):6,' ':3);while not EOF(f2)do begin read(f2,a1);write(a1:3)end;writeln;
        c1:=FileSize(f1);c2:=FileSize(f2);
        close(f0);close(f1);close(f2);
      end 
  until(c1=0)or(c2=0);
end.

Удачи!

Консультировал: Зенченко Константин Николаевич (Старший модератор)
Дата отправки: 19.10.2019, 19:28
Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!


В избранное