pascalabcnet/TestSamples/CompilationSamples/QuickSort.pas

68 lines
1.1 KiB
ObjectPascal
Raw Normal View History

2015-05-14 22:35:07 +03:00
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>. <20><><EFBFBD><EFBFBD><EFBFBD>
const Sz=100;
type IArr=array [1..Sz] of integer;
procedure swap(var a,b: integer);
var v: integer;
begin
v:=a;
a:=b;
b:=v
end;
procedure Print(const A: IArr; n: integer);
var i: integer;
begin
for i:=1 to n do
write(A[i],' ');
writeln;
end;
procedure FillRandom(var A: IArr; n: integer);
var i: integer;
begin
for i:=1 to n do
A[i]:=random(100);
end;
procedure QuickSort(var A: IArr; n: integer);
procedure sort(l,r: integer);
var
i,j: integer;
w,x: integer;
begin
i:=l; j:=r;
x:=A[(l+r) div 2];
repeat
while A[i]<x do Inc(i); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> >= x
while A[j]>x do Dec(j); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <= x
if i<=j then
begin
swap(A[i],A[j]);
Inc(i);
Dec(j);
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r)
end;
begin
sort(1,n)
end;
const n=30;
var A: IArr;
begin
cls;
FillRandom(A,n);
writeln('<27><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ');
Print(A,n);
writeln('<27><><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>: ');
QuickSort(A,n);
Print(A,n);
end.