Informatică, întrebare adresată de Marynella, 9 ani în urmă

Realizati un program pascal care ordoneaza crescator elementele vectorului a =( 3,2,1,6,4) folosint metoda de sortare prin insertie ..


ionutg38: Nu mai programez in Pascal de foarte mult timp. Vrei solutia in C++?
ionutg38: Iti scriu totusi procedura Pascal pentru sortare prin insertie.
ionutg38: Principiu: tabloul este vazut ca fiind format din doua subtablouri a[1], a[2],..., a[i-1] si respectiv a[i], a[i+1],...,a[N] (i=2,N). Secventa a[1],...,a[i-1] este ordonata si urmeaza ca a[i] sa fie inserat in aceasta secventa la locul potrivit, astfel incit secventa a[1],...,a[i-1],a[i] sa devina ordonata, urmind ca in pasul urmator cele doua subtablouri considerate sa fie a[1],...,a[i] si a[i+1],...,a[N].
ionutg38: Pentru a gasi locul in care trebuie sa fie inserat a[i] se parcurge sirul a[1],...,a[i-1] de la dreapta spre stinga, pina cind fie se gaseste un element cu cheia <= a[i].cheie, fie s-a atins capatul sirului. Aici se poate utiliza metoda fanionului, extinzind tabloul spre stinga cu elementul a[0] care se asigneaza initial cu a[i] (deci TipIndex=0..N).
ionutg38: Am scris procedura la rubric raspuns.
ionutg38: procedure sortInsertie(var v:vector); var i,j,ind,x:integer; begin for i:=2 to v.n do begin ind:=i-1; x:=v.e[i]; while (ind>0) and (x<v.e[ind]) do begin v.e[ind+1] := v.e[ind]; ind:=ind -1; end end end;

Răspunsuri la întrebare

Răspuns de ionutg38
0
procedure Insertie;
VAR i,j : TipIndex;
begin
for i:=2 to N do begin {insereaza a[i] la locul potrivit in sirul a[1]...a[i]}
a[0]:=a[i]; j:=i-1;
{cauta locul de inserare}
while a[j].cheie > a[0].cheie do begin
a[j+1]:=a[j]; j:=j-1
end;
a[j+1]:=a[0]
end;
end; {Insertie}


Alte întrebări interesante