Jak przygotować implementację sortowania przez łączenie, z użyciem 3 kolejek?

0

Witam
czy mógłbym mi ktoś wytłumaczyć jak to zrobić ??

0

Przecież w samym tytule wytłumaczono!
Dwie już posortowane kolejki łączysz w jedną.
Co do samego sortowania to albo klasyczny Merge albo ten dziwaczny algorytm do sortowania na plikach opisany u Cormen'a

0

Mam już takie coś ale nadal nie wiem czy to jest dobrze

program sortowanie;
uses crt;
 
type
  wskaznik=^element;
  element=record
    dana:integer;
    dana2:integer;
    dana3:integer;
    next:wskaznik;
  end;
 
var
  head,head2,head3,tail:wskaznik;
  i,c:byte;
  ne,nu:integer;
 
procedure enqueue(var h,t:wskaznik; a:integer);
  var
    nowy:wskaznik;
  begin
    new(nowy);
    nowy^.dana:=a;
    nowy^.next:=nil;
    if (h=nil) then
      begin
       h:=nowy;
       t:=h;
      end
    else
      begin
       t^.next:=nowy;
       t:=t^.next;
      end;
  end;
 
procedure printqueue(h:wskaznik);
  var
  temp:wskaznik;
  begin
  temp:=h;
  if (h = nil) then
   writeln('Kolejka jest pusta.')
   else
   begin
    while (h <> nil) do
     begin
     write(h^.dana,#32);
     h:=h^.next;
     end;
    writeln;
  end;
  end;
 
procedure sortuj(h:wskaznik);
 var
  i,j,k,l:byte;
  temp,t,w:wskaznik;
begin
k:=2;
l:=4;
temp:=h;
 
repeat
 
   for i:=1 to 8 do
    if i<5 then
     begin
      t^.dana2:=h^.dana;
      h:=h^.next;
      t:=t^.next;
     end
    else
     begin
      t^.dana3:=h^.dana;
      h:=h^.next;
      t:=t^.next;
     end;
 
h:=temp;
t:=temp;
w:=temp;
 
  for i:=1 to l do
   for j:=1 to k do
    begin
      if h < t then
      begin
       w^.dana:=h^.dana2;
       w:=w^.next;
       w^.dana:=t^.dana3;
      end
     else
      begin
       w^.dana:=t^.dana3;
       w:=w^.next;
       w^.dana:=h^.dana2;
      end;
       h:=h^.next;
       t:=t^.next;
    end;
k:=k*21;
l:=l-2;
until k<>16;
 
end;
 
procedure dequeue(var h:wskaznik; var a:integer);
 var
 temp:wskaznik;
 begin
  temp:=h^.next;
  a:=h^.dana;
  dispose(h);
  h:=temp;
 end;
 
 
 
begin
  clrscr;
ne:=8;
  randomize;
  writeln('Losowe 8 elementow do posortowania:');
  for i:=1 to ne do
   begin
   nu:=random((10)+1);
   enqueue(head,tail,nu);
   end;
 
  printqueue(head);
  readln;
 
  sortuj(head);
  writeln;
  writeln('Posortowane elementy:');
  printqueue(head);
  readln;
  writeln;
  writeln('Niszczenie kolejki...');
  while head<>nil do
  begin
   dequeue(head,nu);
   writeln(nu);
  end;
 
  writeln;writeln('Koniec.');
  end.

Prosiłbym o poprawienie jeśli są jakieś błędy

dodanie znacznika <code class="pascal"> - furious programming

0

Zacznij od uwzględnienia formatowania i wstawienia kodu w odpowiednie znaczniki.

0

Ile byś chciał za wykonanie całego programu ??

Zrobiłbym go sam ale na jutro mam go oddać a nie za bardzo to ogarniam :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1