Berikut contoh source code pada pascal :
program Heap ( input, infile, output ) ;
const
NameLength = 30;
ListLength = 100 ;
type
FileName = String(NameLength);
ListIndex = 1 .. ListLength;
ListItem = integer;
list = array [ListIndex] of ListItem;
var
FName : FileName;
infile : text;
l: list;
i : integer;
size : integer ;
(*----------------------------------------------------------*)
procedure Swap ( var x,y : ListItem ) ;
var
Temp : ListItem ; (* temp storage *)
begin (* procedure *)
Temp := x;
x:= y;
y:= Temp;
end (* Swap *) ;
(*------------------------------------------------------------------*)
procedure FixHeap ( var a : List ; i : ListIndex ; Size : ListIndex );
var
j : ListIndex;
begin (* procedure *)
if i <= Size div 2 then begin
j := 2*i;
if j+1 <= Size then begin
if a[j] < a[j+ 1] then begin
j := j+1;
end;
end ;
if a[i] < a[j] then begin
Swap (a[j],a[i] ) ;
fixheap (a, j, Size) ;
end ;
end ;
end (* FixHeap *) ;
(*----------------------------------------------------------*)
procedure MakeHeap
( var A : List ; Size : ListIndex ) ;
var
i : integer ; (* lcv *)
begin (* procedure *)
for i := Size div 2 downto 1 do begin
FixHeap(A,i,Size);
end (* loop *) ;
end (* MakeHeap *) ;
(*==================================================================*)
begin (* main program *)
WriteLn ('what file?');
ReadLn(FName);
Open (infile, fname, old);
Reset(infile);
i := 1;
while not eof (infile) do begin
ReadLn(infile, L[i]) ;
i := i+1;
end ;
Size := i - 1 ;
WriteLn ( 'Unsorted Data:');
for i := 1 to Size do begin
Write (L[i]:7);
if i mod 10 = 0 then begin
WriteLn ;
end ;
end;
WriteLn ;
MakeHeap(L, Size);
for i := Size downto 2 do begin
Swap (L[i],L[1]) ;
Fixheap(L, 1,i-1);
end (* loop *) ;
WriteLn ('Sorted Data:');
for i := 1 to Size do begin
Write(L[i]:7);
if i mod 10 = 0 then begin
writeln;
end (* if *) ;
end (* loop *) ;
Close (infile) ;
end (* Heap *).
const
NameLength = 30;
ListLength = 100 ;
type
FileName = String(NameLength);
ListIndex = 1 .. ListLength;
ListItem = integer;
list = array [ListIndex] of ListItem;
var
FName : FileName;
infile : text;
l: list;
i : integer;
size : integer ;
(*----------------------------------------------------------*)
procedure Swap ( var x,y : ListItem ) ;
var
Temp : ListItem ; (* temp storage *)
begin (* procedure *)
Temp := x;
x:= y;
y:= Temp;
end (* Swap *) ;
(*------------------------------------------------------------------*)
procedure FixHeap ( var a : List ; i : ListIndex ; Size : ListIndex );
var
j : ListIndex;
begin (* procedure *)
if i <= Size div 2 then begin
j := 2*i;
if j+1 <= Size then begin
if a[j] < a[j+ 1] then begin
j := j+1;
end;
end ;
if a[i] < a[j] then begin
Swap (a[j],a[i] ) ;
fixheap (a, j, Size) ;
end ;
end ;
end (* FixHeap *) ;
(*----------------------------------------------------------*)
procedure MakeHeap
( var A : List ; Size : ListIndex ) ;
var
i : integer ; (* lcv *)
begin (* procedure *)
for i := Size div 2 downto 1 do begin
FixHeap(A,i,Size);
end (* loop *) ;
end (* MakeHeap *) ;
(*==================================================================*)
begin (* main program *)
WriteLn ('what file?');
ReadLn(FName);
Open (infile, fname, old);
Reset(infile);
i := 1;
while not eof (infile) do begin
ReadLn(infile, L[i]) ;
i := i+1;
end ;
Size := i - 1 ;
WriteLn ( 'Unsorted Data:');
for i := 1 to Size do begin
Write (L[i]:7);
if i mod 10 = 0 then begin
WriteLn ;
end ;
end;
WriteLn ;
MakeHeap(L, Size);
for i := Size downto 2 do begin
Swap (L[i],L[1]) ;
Fixheap(L, 1,i-1);
end (* loop *) ;
WriteLn ('Sorted Data:');
for i := 1 to Size do begin
Write(L[i]:7);
if i mod 10 = 0 then begin
writeln;
end (* if *) ;
end (* loop *) ;
Close (infile) ;
end (* Heap *).
Berikut contoh dalam bentuk gif :
Sumber : Loserbombti, Scranton

No comments:
Post a Comment