際際滷

際際滷Share a Scribd company logo
K畛 thu畉t kh畛 畛 quy
Tr畉n 畛c Thi畛n
畛 quy l qu畉 tim trong c叩c nghi棚n c畛u l箪 thuy畉t c滴ng nh動 th畛c hnh t鱈nh to叩n, 達 th畛 hi畛n r畉t
nhi畛u s畛c m畉nh v c坦 動u i畛m trong nhi畛u bi to叩n. Tuy nhi棚n bi ny t担i l畉i i ng動畛c v畛i c担ng
vi畛c ch炭ng ta th動畛ng lm: kh畛 畛 quy, 坦 l v畉n 畛 c滴ng c坦 nhi畛u th炭 v畛 v 叩ng 畛 ch炭ng ta
xem x辿t.
Kh畛 畛 quy 畛 但y l bi畉n m畛t th畛 t畛c 畛 quy thnh m畛t th畛 t畛c ch畛 ch畛a v嘆ng l畉p m kh担ng 畉nh
h動畛ng g狸 畉n c叩c y畉u t畛 kh叩c, ch畛 kh担ng ph畉i l thay 畛i thu畉t to叩n. V鱈 d畛 nh動 trong c叩c hm
畛 quy t鱈nh n! v s畛 Fibonaci F(n) ta c坦 th畛 thay b畉ng m畛t v嘆ng l畉p 畛 t鱈nh; 坦 kh担ng ph畉i l
ph動董ng ph叩p kh畛 畛 quy m t担i mu畛n n坦i. Trong tr動畛ng h畛p t畛ng qu叩t, kh畛 畛 quy l m畛t vi畛c
lm kh叩 ph畛c t畉p v kh坦 khn. 畛 hm n! hay F(n) ta c坦 th畛 d湛ng m畛t thu畉t to叩n kh担ng 畛 quy,
nh動ng trong m畛t s畛 bi to叩n, 畛 quy l b畉t bu畛c. B畉n c坦 th畛 n坦i r畉ng, v畉y th狸 c畛 s畛 d畛ng 畛
quy, v畛a ng畉n g畛n d畛 hi畛u, v畛a d畛 ci 畉t. Nh動ng c坦 担i khi, s畛 h畉n h畉p c畛a b畛 nh畛 dnh cho
ch動董ng tr狸nh con kh担ng cho ph辿p ch炭ng ta lm i畛u 坦; ho畉c ch炭ng ta bi畉t r畉ng, ng担n ng畛 m叩y
kh担ng c坦 畛 quy, v狸 v畉y c叩c tr狸nh bi棚n d畛ch 畛u ph畉i c坦 nhi畛m v畛 kh畛 畛 quy. V b畉n c坦 th畛
th畛c s畛 g畉p r畉c r畛i v畛i th畛 t畛c 畛 quy c畛a m狸nh khi trong m畛t m担i tr動畛ng l畉p tr狸nh m kh担ng
cung c畉p kh畉 nng g畛i 畛 quy. Kh畛 畛 quy gi炭p b畉n v畉n gi畛 動畛c nguy棚n b畉n thu畉t to叩n 畛
quy c畛a m狸nh m kh担ng h畛 c坦 l畛i g畛i 畛 quy, v nh動 th畉 ch動董ng tr狸nh c坦 th畛 ch畉y 動畛c trong
b畉t k畛 m担i tr動畛ng l畉p tr狸nh no.
Kh畛 畛 quy th畛c ch畉t l ch炭ng ta ph畉i lm c担ng vi畛c c畛a m畛t tr狸nh bi棚n d畛ch 畛i v畛i m畛t th畛 t畛c,
坦 l: 畉t t畉t c畉 c叩c gi叩 tr畛 c畛a c叩c bi畉n c畛c b畛 v 畛a ch畛 c畛a ch畛 th畛 k畉 ti畉p vo ngn x畉p
(Stack), quy 畛nh c叩c gi叩 tr畛 tham s畛 cho th畛 t畛c v chuy畛n t畛i v畛 tr鱈 b畉t 畉u th畛 t畛c, th畛c hi畛n
l畉n l動畛t t畛ng c但u l畛nh. Sau khi th畛 t畛c hon t畉t th狸 n坦 ph畉i l畉y ra kh畛i ngn x畉p 畛a ch畛 tr畉 v畛 v
c叩c gi叩 tr畛 c畛a c叩c bi畉n c畛c b畛, kh担i ph畛c c叩c bi畉n v chuy畛n t畛i 畛a ch畛 tr畉 v畛.
畛 d畛 theo d探i ch炭ng ta l畉y v鱈 d畛 v畛i bi to叩n c畛 th畛 l bi to叩n duy畛t c但y. Gi畉 s畛 c坦 m畛t c但y
nh畛 ph但n l動u tr畛 trong bi畉n 畛ng t 動畛c 畛nh ngh挑a:
type pnode = ^node;
node = record
inf : variable; { truong luu tru thong tin }
l,r : pnode;
end;
var t : pnode;
Xu畉t ph叩t t畛 n炭t g畛c t, c畉n duy畛t qua h畉t c但y theo th畛 t畛 t畛 tr叩i qua ph畉i. Ch動董ng tr狸nh con 畛
quy s畉 nh動 sau:
procedure Try(t : pnode);
begin
if t <> nil then
begin
visit(t);
Try(t^.l);
Try(t^.r);
end;
end;
Tr動畛c h畉t c坦 th畛 th畉y r畉ng l畛nh g畛i 畛 quy th畛 hai c坦 th畛 動畛c kh畛 d畛 dng b畛i kh担ng c坦 m達
l畛nh theo sau n坦. Khi l畛nh ny th畛c hi畛n th狸 th畛 t畛c Try( ) 動畛c g畛i v畛i tham s畛 t^.r v khi l畛nh
g畛i ny k畉t th炭c th狸 th畛 t畛c Try hi畛n hnh c滴ng k畉t th炭c. Ch動董ng tr狸nh 動畛c vi畉t l畉i nh動 sau
d湛ng goto:
procedure try(t : pnode);
label 0;
begin
0 : if t = nil then exit;
visit(t);
try(t^.l);
t := t^.r;
goto 0;
end;
坦 l k畛 thu畉t r畉t n畛i ti畉ng 動畛c g畛i l kh畛 畛 quy ph畉n cu畛i. Vi畛c kh畛 l畉n g畛i 畛 quy c嘆n l畉i 嘆i
h畛i ph畉i lm nhi畛u vi畛c h董n. Gi畛ng nh動 m畛t tr狸nh bi棚n d畛ch ch炭ng ta ph畉i t畛 ch畛c m畛t ngn x畉p
(Stack) 畛 l動u tr畛 c叩c bi畉n c畛c b畛, c叩c tham s畛, v s畛 d畛ng c叩c th畛 t畛c:
Push(t): 畉t bi畉n t vo 畛nh Stack;
Hm pop: l畉y 1 gi叩 tr畛 畛 畛nh stack.
Hm stackempty: B叩o hi畛u Stack 達 r畛ng.
畛 但y kh担ng c坦 gi叩 tr畛 tr畉 v畛 v ch畛 c坦 m畛t bi畉n c畛c b畛 l t n棚n ch炭ng ta s畉 n畉p n坦 vo stack
n畉u ch動a 動畛c x畛 l箪 v 畛 m畛i b動畛c ch炭ng ta l畉y bi畉n 畛 畛nh stack ra 畛 x畛 l箪 n坦 v c叩c n炭t con
ti畉p theo c畛a n坦. Ch動董ng tr狸nh kh畛 c畉 l畛i g畛i 畛 quy th畛 hai s畉 nh動 sau:
procedure try(t : pnode);
label 0,1,2;
begin
0: if t = nil then goto 1;
visit(t);
push(t);
t := t^.l;
goto 0;
2 : t := t^.r; goto 0;
1 : if stackempty then exit;
t := pop;
goto 2;
end;
Th畛 t畛c tr棚n ch畛 l di畛n gi畉i th担 c畛a 箪 t動畛ng 畛 c叩c b畉n d畛 hi畛u, v狸 v畉y c叩c ch畛 th畛 goto c嘆n
r動畛m ra, ch炭ng ta s畉 vi畉t l畉i m畛t c叩ch c坦 c畉u tr炭c h董n nh動 sau:
procedure try(t : pnode);
label 0;
begin
0: while t <> nil do
begin
visit(t);
push(t^.r);
t := t^.l
end;
if stackempty then exit;
t := pop;
goto 0;
end;
B但y gi畛, lo畉i b畛 hon ton c叩c ch畛 th畛 goto v tr叩nh tr動畛ng h畛p n畉p c叩c n炭t r畛ng vo stack ta c坦
th畛 t畛c duy畛t c但y kh担ng 畛 quy chu畉n nh動 sau, c叩c b畉n s畉 th畉y r畉ng v畛 b畉n ch畉t n坦 kh担ng
kh叩c th畛 t畛c 畛 quy l m畉y:
procedure try(t : pnode);
begin
push(t);
repeat
t := pop;
visit(t);
if t^.l <> nil then push(t^.l);
if t^.r <> nil then push(t^.r);
until stackempty;
end;
畛 minh ho畉 c畛 th畛 h董n cho k畛 thu畉t ny, t担i xin tr狸nh by v畛i c叩c b畉n ch動董ng tr狸nh s畉p x畉p
nhanh(QuickSort) kh畛 畛 quy:
Program Quick_sort_Khu_de_quy_Th;
const
inp = 'FileName.inp';
out = 'FileName.out';
maxstack = 1000;
maxn = 1000;
type
it = longint;
var
a : array[1..maxn] of it;
sl,sr : array[1..maxstack] of word;
n,top : it;
f : text;
procedure push(l,r : word);
begin
inc(top);
sl[top] := l;
sr[top] := r;
end;
procedure pop(var l,r : word);
begin
l := sl[top];
r := sr[top];
dec(top);
end;
function stackEmpty : boolean;
begin
stackempty := top = 0;
end;
procedure init;
begin
top := 0;
end;
procedure nhap;
var
i : it;
begin
assign(f,inp);
reset(f);
readln(f,n);
for i := 1 to n do read(f,a[i]);
close(f);
end;
procedure sort(l1,r1 : word);
var
l,r,i,j : word;
t,tg : it;
begin
push(l1,r1);
repeat
pop(l,r);
i := l;
j := r;
t := a[(l+r) div 2];
repeat
while a[i] < t do inc(i);
while t < a[j] do dec(j);
if i <= j then
begin
tg := a[i];
a[i] := a[j];
a[j] := tg;
inc(i);
dec(j);
end;
until i > j;
if i < r then push(i,r);
if l < j then push(l,j);
until stackEmpty;
end;
procedure xuat;
var
i : it;
begin
assign(f,out);
rewrite(f);
for i := 1 to n do write(f,a[i],' ');
close(f);
end;
BEGIN
nhap;
init;
sort(1,n);
xuat;
END.
Trong m畛t l炭c no 坦 ch炭ng ta c坦 th畛 kh畉o s叩t t鱈nh hi畛u qu畉 c畛a vi畛c kh畛 畛 quy. C嘆n b但y gi畛
b畉n v畉n c坦 th畛 trung thnh v畛i th畛 t畛c Try 畛 quy c畛a m狸nh, n坦 th畛c s畛 ng畉n g畛n, d畛 hi畛u v d畛
ci 畉t. D湛 c坦 th畛 kh担ng d湛ng 畉n nh動ng nghi棚n c畛u th棚m l m畛t vi畛c kh担ng h畛 th畛a. Bi畉t 但u
sau ny b畉n tr畛 thnh m畛t ng動畛i vi畉t ch動董ng tr狸nh d畛ch th狸 sao, th畉 th狸 n坦  bi vi畉t ny r畉t b畛
鱈ch cho b畉n r畛i 畉y. Cho th但n 叩i v h畉n g畉p l畉i.
repeat
while a[i] < t do inc(i);
while t < a[j] do dec(j);
if i <= j then
begin
tg := a[i];
a[i] := a[j];
a[j] := tg;
inc(i);
dec(j);
end;
until i > j;
if i < r then push(i,r);
if l < j then push(l,j);
until stackEmpty;
end;
procedure xuat;
var
i : it;
begin
assign(f,out);
rewrite(f);
for i := 1 to n do write(f,a[i],' ');
close(f);
end;
BEGIN
nhap;
init;
sort(1,n);
xuat;
END.
Trong m畛t l炭c no 坦 ch炭ng ta c坦 th畛 kh畉o s叩t t鱈nh hi畛u qu畉 c畛a vi畛c kh畛 畛 quy. C嘆n b但y gi畛
b畉n v畉n c坦 th畛 trung thnh v畛i th畛 t畛c Try 畛 quy c畛a m狸nh, n坦 th畛c s畛 ng畉n g畛n, d畛 hi畛u v d畛
ci 畉t. D湛 c坦 th畛 kh担ng d湛ng 畉n nh動ng nghi棚n c畛u th棚m l m畛t vi畛c kh担ng h畛 th畛a. Bi畉t 但u
sau ny b畉n tr畛 thnh m畛t ng動畛i vi畉t ch動董ng tr狸nh d畛ch th狸 sao, th畉 th狸 n坦  bi vi畉t ny r畉t b畛
鱈ch cho b畉n r畛i 畉y. Cho th但n 叩i v h畉n g畉p l畉i.

More Related Content

Ky thuatkhudequy

  • 1. K畛 thu畉t kh畛 畛 quy Tr畉n 畛c Thi畛n 畛 quy l qu畉 tim trong c叩c nghi棚n c畛u l箪 thuy畉t c滴ng nh動 th畛c hnh t鱈nh to叩n, 達 th畛 hi畛n r畉t nhi畛u s畛c m畉nh v c坦 動u i畛m trong nhi畛u bi to叩n. Tuy nhi棚n bi ny t担i l畉i i ng動畛c v畛i c担ng vi畛c ch炭ng ta th動畛ng lm: kh畛 畛 quy, 坦 l v畉n 畛 c滴ng c坦 nhi畛u th炭 v畛 v 叩ng 畛 ch炭ng ta xem x辿t. Kh畛 畛 quy 畛 但y l bi畉n m畛t th畛 t畛c 畛 quy thnh m畛t th畛 t畛c ch畛 ch畛a v嘆ng l畉p m kh担ng 畉nh h動畛ng g狸 畉n c叩c y畉u t畛 kh叩c, ch畛 kh担ng ph畉i l thay 畛i thu畉t to叩n. V鱈 d畛 nh動 trong c叩c hm 畛 quy t鱈nh n! v s畛 Fibonaci F(n) ta c坦 th畛 thay b畉ng m畛t v嘆ng l畉p 畛 t鱈nh; 坦 kh担ng ph畉i l ph動董ng ph叩p kh畛 畛 quy m t担i mu畛n n坦i. Trong tr動畛ng h畛p t畛ng qu叩t, kh畛 畛 quy l m畛t vi畛c lm kh叩 ph畛c t畉p v kh坦 khn. 畛 hm n! hay F(n) ta c坦 th畛 d湛ng m畛t thu畉t to叩n kh担ng 畛 quy, nh動ng trong m畛t s畛 bi to叩n, 畛 quy l b畉t bu畛c. B畉n c坦 th畛 n坦i r畉ng, v畉y th狸 c畛 s畛 d畛ng 畛 quy, v畛a ng畉n g畛n d畛 hi畛u, v畛a d畛 ci 畉t. Nh動ng c坦 担i khi, s畛 h畉n h畉p c畛a b畛 nh畛 dnh cho ch動董ng tr狸nh con kh担ng cho ph辿p ch炭ng ta lm i畛u 坦; ho畉c ch炭ng ta bi畉t r畉ng, ng担n ng畛 m叩y kh担ng c坦 畛 quy, v狸 v畉y c叩c tr狸nh bi棚n d畛ch 畛u ph畉i c坦 nhi畛m v畛 kh畛 畛 quy. V b畉n c坦 th畛 th畛c s畛 g畉p r畉c r畛i v畛i th畛 t畛c 畛 quy c畛a m狸nh khi trong m畛t m担i tr動畛ng l畉p tr狸nh m kh担ng cung c畉p kh畉 nng g畛i 畛 quy. Kh畛 畛 quy gi炭p b畉n v畉n gi畛 動畛c nguy棚n b畉n thu畉t to叩n 畛 quy c畛a m狸nh m kh担ng h畛 c坦 l畛i g畛i 畛 quy, v nh動 th畉 ch動董ng tr狸nh c坦 th畛 ch畉y 動畛c trong b畉t k畛 m担i tr動畛ng l畉p tr狸nh no. Kh畛 畛 quy th畛c ch畉t l ch炭ng ta ph畉i lm c担ng vi畛c c畛a m畛t tr狸nh bi棚n d畛ch 畛i v畛i m畛t th畛 t畛c, 坦 l: 畉t t畉t c畉 c叩c gi叩 tr畛 c畛a c叩c bi畉n c畛c b畛 v 畛a ch畛 c畛a ch畛 th畛 k畉 ti畉p vo ngn x畉p (Stack), quy 畛nh c叩c gi叩 tr畛 tham s畛 cho th畛 t畛c v chuy畛n t畛i v畛 tr鱈 b畉t 畉u th畛 t畛c, th畛c hi畛n l畉n l動畛t t畛ng c但u l畛nh. Sau khi th畛 t畛c hon t畉t th狸 n坦 ph畉i l畉y ra kh畛i ngn x畉p 畛a ch畛 tr畉 v畛 v c叩c gi叩 tr畛 c畛a c叩c bi畉n c畛c b畛, kh担i ph畛c c叩c bi畉n v chuy畛n t畛i 畛a ch畛 tr畉 v畛. 畛 d畛 theo d探i ch炭ng ta l畉y v鱈 d畛 v畛i bi to叩n c畛 th畛 l bi to叩n duy畛t c但y. Gi畉 s畛 c坦 m畛t c但y nh畛 ph但n l動u tr畛 trong bi畉n 畛ng t 動畛c 畛nh ngh挑a: type pnode = ^node; node = record inf : variable; { truong luu tru thong tin } l,r : pnode; end; var t : pnode; Xu畉t ph叩t t畛 n炭t g畛c t, c畉n duy畛t qua h畉t c但y theo th畛 t畛 t畛 tr叩i qua ph畉i. Ch動董ng tr狸nh con 畛
  • 2. quy s畉 nh動 sau: procedure Try(t : pnode); begin if t <> nil then begin visit(t); Try(t^.l); Try(t^.r); end; end; Tr動畛c h畉t c坦 th畛 th畉y r畉ng l畛nh g畛i 畛 quy th畛 hai c坦 th畛 動畛c kh畛 d畛 dng b畛i kh担ng c坦 m達 l畛nh theo sau n坦. Khi l畛nh ny th畛c hi畛n th狸 th畛 t畛c Try( ) 動畛c g畛i v畛i tham s畛 t^.r v khi l畛nh g畛i ny k畉t th炭c th狸 th畛 t畛c Try hi畛n hnh c滴ng k畉t th炭c. Ch動董ng tr狸nh 動畛c vi畉t l畉i nh動 sau d湛ng goto: procedure try(t : pnode); label 0; begin 0 : if t = nil then exit; visit(t); try(t^.l); t := t^.r; goto 0; end; 坦 l k畛 thu畉t r畉t n畛i ti畉ng 動畛c g畛i l kh畛 畛 quy ph畉n cu畛i. Vi畛c kh畛 l畉n g畛i 畛 quy c嘆n l畉i 嘆i h畛i ph畉i lm nhi畛u vi畛c h董n. Gi畛ng nh動 m畛t tr狸nh bi棚n d畛ch ch炭ng ta ph畉i t畛 ch畛c m畛t ngn x畉p (Stack) 畛 l動u tr畛 c叩c bi畉n c畛c b畛, c叩c tham s畛, v s畛 d畛ng c叩c th畛 t畛c: Push(t): 畉t bi畉n t vo 畛nh Stack; Hm pop: l畉y 1 gi叩 tr畛 畛 畛nh stack. Hm stackempty: B叩o hi畛u Stack 達 r畛ng. 畛 但y kh担ng c坦 gi叩 tr畛 tr畉 v畛 v ch畛 c坦 m畛t bi畉n c畛c b畛 l t n棚n ch炭ng ta s畉 n畉p n坦 vo stack n畉u ch動a 動畛c x畛 l箪 v 畛 m畛i b動畛c ch炭ng ta l畉y bi畉n 畛 畛nh stack ra 畛 x畛 l箪 n坦 v c叩c n炭t con ti畉p theo c畛a n坦. Ch動董ng tr狸nh kh畛 c畉 l畛i g畛i 畛 quy th畛 hai s畉 nh動 sau: procedure try(t : pnode); label 0,1,2; begin 0: if t = nil then goto 1; visit(t);
  • 3. push(t); t := t^.l; goto 0; 2 : t := t^.r; goto 0; 1 : if stackempty then exit; t := pop; goto 2; end; Th畛 t畛c tr棚n ch畛 l di畛n gi畉i th担 c畛a 箪 t動畛ng 畛 c叩c b畉n d畛 hi畛u, v狸 v畉y c叩c ch畛 th畛 goto c嘆n r動畛m ra, ch炭ng ta s畉 vi畉t l畉i m畛t c叩ch c坦 c畉u tr炭c h董n nh動 sau: procedure try(t : pnode); label 0; begin 0: while t <> nil do begin visit(t); push(t^.r); t := t^.l end; if stackempty then exit; t := pop; goto 0; end; B但y gi畛, lo畉i b畛 hon ton c叩c ch畛 th畛 goto v tr叩nh tr動畛ng h畛p n畉p c叩c n炭t r畛ng vo stack ta c坦 th畛 t畛c duy畛t c但y kh担ng 畛 quy chu畉n nh動 sau, c叩c b畉n s畉 th畉y r畉ng v畛 b畉n ch畉t n坦 kh担ng kh叩c th畛 t畛c 畛 quy l m畉y: procedure try(t : pnode); begin push(t); repeat t := pop; visit(t); if t^.l <> nil then push(t^.l); if t^.r <> nil then push(t^.r); until stackempty; end; 畛 minh ho畉 c畛 th畛 h董n cho k畛 thu畉t ny, t担i xin tr狸nh by v畛i c叩c b畉n ch動董ng tr狸nh s畉p x畉p nhanh(QuickSort) kh畛 畛 quy: Program Quick_sort_Khu_de_quy_Th; const inp = 'FileName.inp'; out = 'FileName.out'; maxstack = 1000;
  • 4. maxn = 1000; type it = longint; var a : array[1..maxn] of it; sl,sr : array[1..maxstack] of word; n,top : it; f : text; procedure push(l,r : word); begin inc(top); sl[top] := l; sr[top] := r; end; procedure pop(var l,r : word); begin l := sl[top]; r := sr[top]; dec(top); end; function stackEmpty : boolean; begin stackempty := top = 0; end; procedure init; begin top := 0; end; procedure nhap; var i : it; begin assign(f,inp); reset(f); readln(f,n); for i := 1 to n do read(f,a[i]); close(f); end; procedure sort(l1,r1 : word); var l,r,i,j : word; t,tg : it; begin push(l1,r1); repeat pop(l,r); i := l; j := r; t := a[(l+r) div 2];
  • 5. repeat while a[i] < t do inc(i); while t < a[j] do dec(j); if i <= j then begin tg := a[i]; a[i] := a[j]; a[j] := tg; inc(i); dec(j); end; until i > j; if i < r then push(i,r); if l < j then push(l,j); until stackEmpty; end; procedure xuat; var i : it; begin assign(f,out); rewrite(f); for i := 1 to n do write(f,a[i],' '); close(f); end; BEGIN nhap; init; sort(1,n); xuat; END. Trong m畛t l炭c no 坦 ch炭ng ta c坦 th畛 kh畉o s叩t t鱈nh hi畛u qu畉 c畛a vi畛c kh畛 畛 quy. C嘆n b但y gi畛 b畉n v畉n c坦 th畛 trung thnh v畛i th畛 t畛c Try 畛 quy c畛a m狸nh, n坦 th畛c s畛 ng畉n g畛n, d畛 hi畛u v d畛 ci 畉t. D湛 c坦 th畛 kh担ng d湛ng 畉n nh動ng nghi棚n c畛u th棚m l m畛t vi畛c kh担ng h畛 th畛a. Bi畉t 但u sau ny b畉n tr畛 thnh m畛t ng動畛i vi畉t ch動董ng tr狸nh d畛ch th狸 sao, th畉 th狸 n坦 bi vi畉t ny r畉t b畛 鱈ch cho b畉n r畛i 畉y. Cho th但n 叩i v h畉n g畉p l畉i.
  • 6. repeat while a[i] < t do inc(i); while t < a[j] do dec(j); if i <= j then begin tg := a[i]; a[i] := a[j]; a[j] := tg; inc(i); dec(j); end; until i > j; if i < r then push(i,r); if l < j then push(l,j); until stackEmpty; end; procedure xuat; var i : it; begin assign(f,out); rewrite(f); for i := 1 to n do write(f,a[i],' '); close(f); end; BEGIN nhap; init; sort(1,n); xuat; END. Trong m畛t l炭c no 坦 ch炭ng ta c坦 th畛 kh畉o s叩t t鱈nh hi畛u qu畉 c畛a vi畛c kh畛 畛 quy. C嘆n b但y gi畛 b畉n v畉n c坦 th畛 trung thnh v畛i th畛 t畛c Try 畛 quy c畛a m狸nh, n坦 th畛c s畛 ng畉n g畛n, d畛 hi畛u v d畛 ci 畉t. D湛 c坦 th畛 kh担ng d湛ng 畉n nh動ng nghi棚n c畛u th棚m l m畛t vi畛c kh担ng h畛 th畛a. Bi畉t 但u sau ny b畉n tr畛 thnh m畛t ng動畛i vi畉t ch動董ng tr狸nh d畛ch th狸 sao, th畉 th狸 n坦 bi vi畉t ny r畉t b畛 鱈ch cho b畉n r畛i 畉y. Cho th但n 叩i v h畉n g畉p l畉i.