MultipleListSort - Sortowanie na wielu listach

0

Witam !

Ma ktoś jakieś pojęcie na temat tego sposobu sortowania, sposobu jego działania, algorytm lub pseudokod?

Google niestety nic na ten temat nie wie.

Pozdrawiam

0

hmm?

0

ale tam nic nie ma ...

0

Znalazlem w ksiazce z 1982 roku taki oto kod tego algorytmu:


procedure multiplelistsort(n: integer; min,max: real);
{tablica a[1..n] typu real jest obiektem zewnętrznym względem procedury,
podobnie jak stala m typu integer oraz min, max typu real}

type relem = elem; rkolejka = kolejka;
elem = record
val: real;
next: relem
end;
kolejka = record
front, rear: rkolejka
end;

var b: array [1..m] of kolejka;
p: relem;
i,j: integer;
h: real;

procedure merge (A,B: rkolejka);
begin
if A^.front = nil then
begin
A.front:=B.front;
A.rear:=B.rear;
end
else if B^.front <> nil then
begin
A.rear.next:=B^.front;
A.rear:=B.rear;
end;
end;

procedure into (A: rkolejka; p: relem);
var q,r: relem;
begin
if A^.front = nil then
begin {tworzymy kolejke jednoelementowa}
A^.front:=p;
A^.rear:=p;
end
else
begin
q:=A^.front;
if q.val >= p.val then
begin {p jest elementem najmniejszym}
A^.front:=p;
p^.next:=q;
end
else {szukanie miejsce dla p}
repeat
r:=q;
q:=q^.next;
if q = nil then
begin {p na koncu kolejki}
a.rear:=p; r.next:=p;
end
else
if q.val >= p.val then
begin {miejsce dla p znalezione}
r^.next:=p;
p^.next:=q;
q:=nil;
end;
until (q=nil);
end;
end;

begin
h:=(max-min)/m;
for j:=1 to m do
begin
new(b[j]);
b[j]^.front:=nil;
b[j]^.rear:=nil;
end;
for i:=1 to n do
begin
new(p);
p^.val:=a[i];
p^.next:=nil;
j:=entier((a[i]-min)/h);
if m>j then j:=j+1;
into(b[j],p)
end;

for j:=2 to m do
merge(b[1],b[j]);
p:=b[1]^.front;
for i:=1 to n do
begin
a[i]:=p^.val;
p:=p^.next;
end;
end;

Ktos moze pomoc go rozwikłać? :)

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