Documente Academic
Documente Profesional
Documente Cultură
PRINCIPIU:
- Se copiază vectorul x într-un vector ajutător, de ex. y
- Pentru orice y[i] , se determină câte elemente din vector sunt mai mici decât el ➔ k
- Se reconstruiește vectorul x, plasând y[i] în x, pe poziția k+1
x= 17 13 14 5 7 25 10
1 2 3 4 5 6 7
y= 17 13 14 5 7 25 10
Pentru y[1], numărul valorilor mai mici decât y[1] (17) este 5 ➔ x[5+1]=y[1]
x= 17 13 14 5 7 17 10
1 2 3 4 5 6 7
Pentru y[2], numărul valorilor mai mici decât y[2] (13) este 3 ➔ x[3+1]=y[2]
x= 17 13 14 13 7 17 10
1 2 3 4 5 6 7
Pentru y[3], numărul valorilor mai mici decât y[3] (14) este 4 ➔ x[4+1]=y[3]
x= 17 13 14 13 14 17 10
1 2 3 4 5 6 7
Pentru y[4], numărul valorilor mai mici decât y[4] (5) este 0 ➔ x[0+1]=y[4]
x= 5 13 14 13 14 17 10
1 2 3 4 5 6 7
Pentru y[5], numărul valorilor mai mici decât y[5] (7) este 1 ➔ x[1+1]=y[5]
x= 5 7 14 13 14 17 10
1 2 3 4 5 6 7
Pentru y[6], numărul valorilor mai mici decât y[6] (25) este 6 ➔ x[6+1]=y[6]
x= 5 7 14 13 14 17 25
1 2 3 4 5 6 7
Pentru y[7], numărul valorilor mai mici decât y[7] (10) este 2 ➔ x[2+1]=y[7]
x= 5 7 10 13 14 17 25
Pagină 1 din 2
Profesor Darie Simona
Implementări C++
Varianta 1 - cu 1 vector ajutător
for(i=1;i<=n;i++) y[i]=x[i];
for(i=1;i<=n;i++) {
k=0;
for(j=1; j<=n; j++)
if (y[j] < y[i]) k++;
x[k+1]=y[i]; // reconstruire vector x
}
Metoda 2 – se aplică numai pentru vector alcătuit din valori ce pot deveni poziții ale altui vector
PRINCIPIU:
- Se folosește un vector caracteristic pentru mulțimea valorilor din vectorul x, de ex. v
- Pentru orice x[i] , v[x[i]] se incrementează
- Se reconstruiește vectorul x, pe baza vectorului v
Ex. ne propunem ordonare crescătoare, pentru vectorul x ce conține numere naturale cu maxim 2 cifre
➔ mulțimea valorilor din vectorul x este {0,1,2,...,99}. Aceste valori pot deveni poziții în vectorul v în care, v[i]
semnifică numărul de apariții ale valorii i în vectorul x.
x= 4 1 4 1 4 2 3
1 2 3 4 5 6 7
v= 0 2 1 1 3 0 0
0 1 2 3 4 ..... 99
x= 1 1 2 3 4 4 4
1 2 3 4 5 6 7
Implementare C++
for(i=1;i<=n;i++) v[i]=0;
for(i=1;i<=n;i++) v[ x[i] ]++;
n=0;
for(i=0;i<100;i++)
while (v[i]>0) x[++n]=i, v[i]--;
Pagină 2 din 2