program MergeSort;
uses crt;
type arr = array [1..100] of integer;
var
ArrMain,ArrUrut : arr;
n,m : integer;
function merge(Left:arr; pjgL:integer; Right : arr; pjgR:integer) :arr;
var
i,j,k,m,panjang: integer;
hasil : arr;
begin
i:=1;
j:=1;
k:=1;
panjang:=pjgL+pjgR;
while ((pjgL>0) and (pjgR>0)) do
begin
if(Left[i]<= Right[j]) then
begin
hasil[k]:=Left[i];
i:=i+1;
k:=k+1;
pjgL:=pjgL-1;
end
else
begin
hasil[k]:=Right[j];
j:=j+1;
k:=k+1;
pjgR:=pjgR-1;
end;
end;
while (pjgL>0) do
begin
hasil[k]:=Left[i];
i:=i+1;
k:=k+1;
pjgL:=pjgL-1;
end;
while (pjgR>0) do
begin
hasil[k]:=Right[j];
j:=j+1;
k:=k+1;
pjgR:=pjgR-1;
end;
merge:=hasil;
for m:= 1 to panjang do
writeln('Array Hasil ke-',m,' : ',hasil[m]);
end;
function mergesort(pjg:integer;A : arr):arr;
var
middle,i,pjgLeft,pjgRight : integer;
ArrLeft,ArrRight,ArrHasil : arr;
begin
if pjg <= 1 then
mergesort := A
else
begin
middle := pjg div 2;
for i:=1 to middle do
ArrLeft[i]:=A[i];
for i:=(middle+1) to pjg do
ArrRight[i-middle]:=A[i];
pjgLeft := pjg div 2;
pjgRight := (pjg+1) div 2;
for m:= 1 to pjgLeft do
writeln('ArrayLeft ke-',m,' : ',ArrLeft[m]);
for m:= 1 to pjgRight do
writeln('ArrayRight ke-',m,' : ',ArrRight[m]);
ArrLeft:=mergesort(pjgLeft,ArrLeft);
ArrRight:=mergesort(pjgRight,ArrRight);
mergesort:=merge(ArrLeft,pjgLeft,ArrRight,pjgRight);
end;
end;
begin
clrscr;
write('Jumlah array : ');readln(n);
for m := 1 to n do
begin
write('Array ke-',m,' : ');
readln(ArrMain[m]);
end;
writeln;
ArrUrut := mergesort(n,ArrMain);
for m:= 1 to n do
writeln('Array Urut ke-',m,' : ',ArrUrut[m]);
end.
{program ini dibuat dengan XCode, klo dijalankan pada Pascal Dos akan error karena tidak bisa mengembalikan nilai dalam bentuk array }
Langganan:
Posting Komentar (Atom)

Tidak ada komentar:
Posting Komentar