home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Hacker Chronicles 2
/
HACKER2.BIN
/
458.NETSORT.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1988-01-25
|
2KB
|
75 lines
function comp(var p,q : log_type): boolean;
var test : boolean;
begin
test := false;
case comparison of
0 : if ((p.suffix = q.suffix) AND ((p.prefix+p.area) < (q.prefix+q.area)))
OR (p.suffix < q.suffix)
then test := true;
1 : if ( (p.area < q.area) OR
( (p.area = q.area) AND (p.suffix < q.suffix) ) OR
( (p.area = q.area) AND (p.suffix = q.suffix)
AND (p.prefix < q.prefix) ) )
THEN test := true;
end;
comp := test;
end;
procedure qsort(var x: net_array; m,n : integer);
var i,j : integer;
procedure partit(var a: net_array; var i,j : integer;
left, right: integer);
var pivot: log_type;
procedure swap (var p,q : log_type);
var hold : log_type;
begin
hold := p;
p := q;
q := hold;
end;
begin
pivot := a[(left+right) div 2]^;
i := left;
j := right;
while ( i <= j) do
begin
while (comp(a[i]^, pivot)) do
i := i + 1;
while (comp(pivot, a[j]^)) do
j := j - 1;
if (i <= j ) then
begin
swap(a[i]^,a[j]^);
i := i + 1;
j := j - 1;
end;
end;
end;
begin { qsort }
if (m < n) then
begin
partit(x,i,j,m,n);
qsort(x,m,j);
qsort(x,i,n);
end;
end;
procedure sort(var x: net_array; n : integer);
begin
comparison := 0;
write('Sorting by suffix, prefix, area');
qsort(x,1,n);
end;
procedure re_sort(var x: net_array; n : integer);
begin
comparison := 1;
write('Sorting by area, suffix, prefix');
qsort(x,1,n);
end;