Sunteți pe pagina 1din 3

--V""'"

5.4.5. Algoritmi pentru sortarea unui vec~or


Acesti algoritmi rearanjeaza elementele vectorului astfel nct ntre valorile lor sa existeo relatie de ordine (ordonare crescatoare sau ordonare descrescatoare). Aranjareaelementelor se poate face: 1. ntr-un alt vector. n acest caz puteti folosi urmatorii algoritmi:

./ algoritmul de sortare prin metoda inserarii,


./ algoritmul de sortare prin metoda numararii. 2. n acelasi vector. n acest caz puteti folosi urmatorii algoritmi:

./ algoritmul de sortare prin metoda selectiei directe,


./ algoritmul de sortare prin metoda bulelor, ./ algoritmul de sortare prin metoda inserarii directe,

./ algoritmul de sortare prin metoda inserarii rapide.


Algoritmiide sortare prezentati se pot folosi pentru ordonarea crescatoare a vectorului. Pentru ordonarea descrescatoare, este suficient sa negati expresiile folosite pentrucomparare. Pentru fiecare dintre algoritmii de sortare prezentati. urmariti modul n care se executa operatia de sortare pe vectorul cu 4 elemente a = {4, 3,2, 1} care reprezinta cazul cel mai dezavantajos pentru un vector cu patru elemente (vectoruleste ordonat invers).

Algoritmul de sortare prin metoda inserarii


n aceasta metoda se folosesc doi vectori:

./ ./

vectorul sursa (vectorul nesortat): a; vectorul destinatie (vectorul sortat): b.

Elementelevectorului sursa a[i] se copiaza n vectoruldestinatie prin inseraren pozitia corespunzatoare,astfel nct n vectoruldestinatiesa fie respectatarelatia de ordine. Se folosesc urmatoarele variabile de memorie:

./

variabilele a si b pentru vectori si variabila n pentru lungimea logica a vectorilor;

./

./

./

primul element din vectorul b (b[O]) este initializat cu valoarea primului element din vectorul a (a[O]). variabila i pentru parcurgerea vectorului sursa n vederea preluarii elementului a[i] pentru a fi inserat n vectorul b: initial (la selectarea primului element - a[1]) ea are valoarea 1, la fiecare noua selectare a unui element a[i] se incrementeaza cu 1, iar operatia de parcurgere se termina atunci cnd variabila i are valoarea n-1 (a fost selectat ultimul element - a[n-1]); variabila j la parcurgerea vectorului destinatie b de la stnga la dreapta, pentru a gasi pozitia n care trebuie inserat elementul a[i] conform relatiei de ordine; la fiecare operatie de cautare a pozitiei n care trebuie inserat noul element a[i], ea va fi initializata cu indicele primului element din vectorul destinatie (O),si se incrementeaza cu 1 pna se gaseste pozitia de inserare sau pna se ajunge la sfrsitul vectorului b (elementul cu indicele i-1); variabila k la parcurgerea vectorului destinatie b de la dreapta la stnga, pentru a deplasa elementele cu o pozitie spre dreapta n vederea eliberarii pozitiei n care se va insera a[i]: la fiecare noua operatie de inserare a unui element a[i], ea va fi initializata cu indicele ultimului element din vectorul destinatie (i), si se decrementeaza cu 1 pentru fiecare deplasare a unui element, pna cnd este deplasat si elementul din pozitia de inserarej; Se copiaza elementul a[O]n vectorul b pe prima pozitie: b[O]=a[O]. Se initializeaza variabila i cu 1 pentru a ncepe procesul de copiere din vectorul a n vectorul b. Se initializeaza variabila j cu valoarea Opentru a ncepe procesul de cautare a pozitiei n care va fi inserat elementul a[i]. Se compara elementul a[i] cu elementul bO].Daca a[i]>bO],nseamna ca nu s-a gasit nca pozitia si se trece la pasul urmator; altfel, s-a gasit pozitia si trece la Pas 7. Se incrementeaza valoarea lui j cu 1: j=j+1 pentru a continua procesul de cautare a pozitiei de inserare. Se compara j cu numarul de elemente din vectorul destinatie (i-1). Daca j<=i-1 se revine la pasul Pas 4; altfel, s-a gasit pozitia si trece la Pas 7. Se initializeaza variabila k cu valoarea i pentru a ncepe procesul de deplasare a elementelor din vectorul b spre dreapta: k=i. Se deplaseaza un element spre dreapta: b[i]= b[i-11. Se decrementeaza valoarea lui k cu 1: ~ k-1. Se compara k cu ultima pozitie n care S0deplaseaza un element (pozitia imediat urmatoare pozitiei de inserarej). Cnd k>=j+1 se revine la Pas 8;

Pasii algoritmului sunt:


Pas 1. Pas 2. Pas 3. Pas 4.

Pas 5. Pas 6. Pas 7. Pas 8. Pas 9. Pas 10.

altfel, se trece la pasul urmator.

Pas11. Se insereaza elementul a[i] n vectorul b pozitiaj: bU]=a[i]. Pas12. Se incrementeaza valoarea lui i cu 1: i=i+1, pentru a continua procesul
Pas 13. Pas 14. de copiere a unui element din vectorul a n vectorul b. Se compara variabila i cu indicele ultimului element din vectorul sursa. Daca i<n-1 se revine la Pas 3; altfel, se trece la pasul urmator. Vectorul este sortat crescator.

Verificareamodului n care se executa algoritmul: a b i=O


i=1

MI:IIII]-

-=c:r:J
,"

initializare

~
1 "1

j=O 4

k=1 4..4 k=O;'/\,' 4 i=21 4 ,1 3 ~ . j=O 3 4 k=2 3 4 k=1 3 3 k=O ,:2~~ 3 j=O k=3 k=2 k=1 k=O i=4 2 2 2 2 3 3 3 - 2: 2

~
;-'

Se insereaza elementul a[1] =3 3>4: Nu ~ ncepe deplasarea 1>=1: Da ~ deplasare 0>=1: Nu ~ inserare Se insereaza elementul a[2] =2 2>3 Nu ~ ncepe deplasarea 2>=1: Da ~ deplasare 1>=1: Da ~ deplasare 0>=1: Nu ~ inserare

4 4 4

i=31 4.1 3 -1 2 iii

Se insereaza elementul a[3] =1 4 1>2 Nu ~ ncepe deplasarea 4!: 4' 3>=1: Da ~ deplasare 4 2>=1: Da ~ deplasare 3 4 1>=1: Da ~ deplasare 3 4 0>=1: Nu ~ inserare
i=n ~ terminare

Secventa de instructiuni pentru algoritmul de sortare prin metoda inserarii este:

int 1,I,n 'Fn; C1nn;9[.5~oT;;"' ,k,aJ~01, C()ut~'.n


for (:('=0; i<n; i++) b [o l""a [O] ;
,for

-- --- - ---- ,
==

{cout"a[nJ+l::n]
.

n;

cina

[i]

(i=l;i<n ;i++) fj==O'; wh~l.e(j<=i -:t;~-& a [il>b[ j'r}. j'f+; fot (k,;=J:; k>=5+1; k-";Jbfk);=b ['k-J.l; - b[j ] =;<1(i];
}' .(j.-=Oii-<niJ.++..1-cout<512.fLl'<d'" "'1;,

""or

- - ----