Program tri_fusion;
uses wincrt;
type
tab=array[1..20] of integer;
var
t,S:tab;
n,i:integer;
procedure saisie(var v:tab;var n:integer);
begin
repeat
writeln(' Donner n');
readln(n);
until n> 2;
for i:= 1 to n do
begin
writeln('t[',i,']');
readln(t[i] );
end;
end;
procedure Fusionner(var T:tab;g,m,d:integer);
var
i,j,k:integer;
r:tab;
begin
for i := g to m do
S[i] := t[i] ;
for j := m+1 to d do
S[j]:= T[d+m+1-j];
i :=g;
j :=d ;
k :=g;
while (i<=m) and (k<=d) do
begin
if S[i]<S[j] then
begin
T[k] := S[i] ;
i :=i+1
end
else
begin
T[k] := S[j] ;
j := j-1;
end;
k := k+1;
end;
end;
procedure tri_Fusion(var T:tab;d,f:integer);
var
m:integer;
begin
if d<>f then
begin
m := (d+f) div 2 ;
tri_Fusion(T,d,m);
tri_Fusion(T,m+1,f);
Fusionner(T,d,m,f);
end;
end;
procedure affiche(v:tab;x:integer);
begin
for i:=1 to n do
write(t[i],'|');
end;
begin
saisie(t,n);
tri_fusion(t,1,n);
affiche(t,n);
end.
/*******************************************/
procédure récursive tri par insertion :
0) procedure tri_insertion(var t:tab;d,f:entier)
1) Si(d <= f)alors
decaler(d,t)
tri_ins(t,d+1,f)
finsi
2) fin tri_insertion
Objets Type/nature
decaler procédure
0) procedure decaler(p:entier;var t:tab)
1) auxكt[p]
jكp-1
si (aux>t[j])et(j>=1) alors
t[j+1]كt[j]
jكj-1
t[j+1]كaux
decaler(p-1,t)
finsi
2) fin decaler
T.D.O
Objets Type/nature
j, aux entier
Leur type nécessite de type des éléments du tableau
procédure récursive de tri Shell :
0)Procedure Tri_Shell (Var t: TAB; n,h : entier)
Si( h > 0)alors
Si(n > h) alors
Tri_Shell(t,n - h,h)
Si(t[n] < t[n - h])alors
Auxك t[n]
i ك n
Repeter
t[i] ك t[i - h]
i ك i - h
jusqu’a (i = h) Ou (aux > t[i - h])
t[i] ك aux
finsi
finsi
Tri_Shell(t,n,h Div 3)
finsi
2) Fin tri_shell
Objets Type/nature
I, aux Entier