type
_tab = record
name: string;
surname: string;
points: byte;
time: byte;
rocedure QSort(adr:pointer;size_elementu:longint;adres:pointer;ile,ilosc_elementow:longint);
var
ii,i,j,k,l: integer;
p1,p2,p11,p22: ^byte;
b: byte;
q: integer;
begin
for ii:=1 to ilosc_elementow {*ilosc_elementow} do for i:=0 to ilosc_elementow-2 do
begin
j:=i+1;
p1:=adres;
inc(p1,i*size_elementu);
p2:=adres;
inc(p2,j*size_elementu);
for k:=ile-1 downto 0 do
begin
{ przeprowadzam porównanie }
p11:=p1; inc(p11,k);
p22:=p2; inc(p22,k);
q:=0;
if p11^>p22^ then q:=2;
if q=0 then continue;
if q=1 then break;
{ zamieniam strony }
for l:=0 to size_elementu-1 do
begin
p11:=adr; inc(p11,i*size_elementu+l);
p22:=adr; inc(p22,(i+1)*size_elementu+l);
b:=p11^;
p11^:=p22^;
p22^:=b;
end;
break;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
QSort(@tab,sizeof(tab),@tab.name,sizeof(tab.name),2);
end;