84 lines
1.2 KiB
Plaintext
84 lines
1.2 KiB
Plaintext
unit sortnfind;
|
|
|
|
interface
|
|
|
|
type
|
|
intar = array of smallint;
|
|
|
|
procedure qsort(var a : intar);
|
|
|
|
function binin(
|
|
a: intar;
|
|
x: smallint
|
|
): boolean;
|
|
|
|
implementation
|
|
|
|
procedure qsort(var a : intar);
|
|
|
|
procedure sort(l, r: longint);
|
|
var
|
|
i, j, x, y: longint;
|
|
|
|
begin
|
|
i := l;
|
|
j := r;
|
|
x := a[(l + r) div 2];
|
|
|
|
repeat
|
|
while a[i] < x do
|
|
inc(i);
|
|
|
|
while x < a[j] do
|
|
dec(j);
|
|
|
|
if i <= j then
|
|
begin
|
|
y := a[i];
|
|
a[i] := a[j];
|
|
a[j] := y;
|
|
inc(i);
|
|
j := j - 1
|
|
end
|
|
until i > j;
|
|
|
|
if l < j then
|
|
sort(l, j);
|
|
|
|
if i < r then
|
|
sort(i, r)
|
|
end;
|
|
|
|
begin
|
|
sort(0, length(a) - 1)
|
|
end;
|
|
|
|
|
|
function binin(
|
|
a: intar;
|
|
x: smallint
|
|
): boolean;
|
|
|
|
var
|
|
l, h, mid: word;
|
|
|
|
begin
|
|
l := 0;
|
|
h := length(a) - 1;
|
|
|
|
while l <= h do
|
|
begin
|
|
mid := (l + h) div 2;
|
|
if x = a[mid] then
|
|
exit(true)
|
|
else if x < a[mid] then
|
|
h := mid - 1
|
|
else
|
|
l := mid + 1
|
|
end;
|
|
|
|
binin := false
|
|
end;
|
|
|
|
end.
|