Sunteți pe pagina 1din 6

Prof.Aron Marius, Liceul Teoretic C.A.

Rosetti, Catedra de Informatic

2008-2009

METODE DE SORTARE
DEF: SORTAREA reprezint operaia prin care se aranjeaz n numere n ordine cresctoare sau descresctoare. Exemplu: Se citesc n numere ntregi. Se cere ca acestea s fie scrise n ordine cresctoare/descresctoare.Se citete n=4 i se citesc numerele 3,1,6,2. Numerele vor fi afiate n ordinea 1,2,3,4(cresctoare) sau 6,3,2,1(descresctoare). - pentru a sorta cele n valori, acestea se citesc ntr-o variabil de tip tablou; - sortarea propriu-zis se face n cadrul acestei variabile; Algoritmii de sortare sunt urmtorii:

I. SORTAREA PRIN SELECTAREA MINIMULUI(MAXIMULUI)


se determin minimul dintre valorile reinute, ncepand cu prima poziie; minimul este trecut n prima poziie, prin interschimbarea coninuturilor dintre componenta de indice 1 i componenta care l memoreaz; se determin minimul dintre valorile reinute,ncepand cu a doua poziie; minimul este trecut n poziia doi, prin interschimbarea coninuturilor dintre componenta de indice 2 i componenta care l memoreaz; se determin minimul dintre valorile reinute, ncepand cu a treia poziie; minimul este trecut n poziia 3, prin intershimbarea coninuturilor dintre componenta de indice 3 i componenta care l memoreaz; .. se determin minimul dintre valorile reinute, ncepand cu penultima poziie; minimul este trecut n penultima poziie, prin interschimbarea coninuturilor dintre componenta de indice n-1 i componenta care l memoreaz.

-1-

Prof.Aron Marius, Liceul Teoretic C.A.Rosetti, Catedra de Informatic

2008-2009

Exemplu: Coninutul variabilei care reine numerele citite este:

3 A[1]

1 A[2]

4 A[3]

2 A[4]

Minimul este 1 i se gsete n poziia 2. Se inverseaz coninuturile componentelor 1 i 2::

1 A[1]

3 A[2]

4 A[3]

2 A[4]

Se determin minimul dintre valorile reinute n componentele de la 2 la 4. Acesta este 2 i este reinut de componenta 4. Se inverseaz coninutul componentelor 2 i 4.

1 A[1]

2 A[2]

4 A[3]

3 A[4]

Se determin minimul dintre valorile reinute n componentele de la 3 la 4. Acesta este 3 i este reinut de componenta 4. Se inverseaz coninutul componentelor 3 i 4.

1 A[1]

2 A[2]

3 A[3]

4 A[4]

Acum valorile se pot afia.Evident, procedeul a fost repetat de n-1 ori. n cazul n care se cere sortarea descresctore, la fiecare pas se calculeaz maximul.

-2-

Prof.Aron Marius, Liceul Teoretic C.A.Rosetti, Catedra de Informatic

2008-2009

#include<iostream.h> #include<conio.h> int a[9],n,i,j,k,man,min; void main() { cout<<n=;cin>>n; for (i=0;i<n;i++) { cout<<a[<<i+1<<]=;cin>>a[i];}; for (i=0;i<n-1;i++) { min=a[i]; k=i; for(j=i+1;j<n;j++) if (a[j]<min) { min=a[j]; k=j;} man=a[k]; a[k]=a[i]; a[i]=man;} for(i=0;i<n;i++) cout<<a[i]<<endl; getch();}

II. SORTAREA PRIN INTERSCHIMBARE


se parcurge variabila inversnd coninuturile componentelor alturate care nu sunt n ordine cresctoare/descresctoare; ................................................................................................................................... procedeul se repet pn cnd are loc o parcurgere n care nu se fac inversri. Exemplu:

3 A[1]

1 A[2]

4 A[3]

2 A[4]

Se efectueaz prima parcurgere. Se inverseaz valorile reinute de componentele [1] i [2]. Se obine:

1 A[1]

3 A[2]

4 A[3]

2 A[4]

-3-

Prof.Aron Marius, Liceul Teoretic C.A.Rosetti, Catedra de Informatic

2008-2009

Valorile reinute de componetele [2] i [3] nu se inverseaza. n schimb, se inverseaz valorile reinute de componentele [3] i [4]

1 A[1]

3 A[2]

2 A[3]

4 A[4]

ntruct au avut loc inversri se reparcurge vectorul. Se inverseaz valorile reinute de [2] i [3]

1 A[1]

2 A[2]

3 A[3]

4 A[4]

Alte inversri nu se fac. Deoarece n actuala parcurgere au fost fcute inversri, se reparcurge vectorul, de data aceasta inutilsi algoritmul se ncheie.

#include<iostream.h> #include<conio.h> int a[9],n,i,k,man,gasit; void main() { cout<<n=;cin>>n; for (i=0;i<n;i++) { cout<<a[<<i+1<<]=;cin>>a[i];}; do { gasit=0; for(i=0; i<n-1 ;i++) if(a[i]>a[i+1]) {man=a[i]; a[i]=a[i+1]; a[i+1]=man; gasit=1;} while (gasit); for(i=0;i<n;i++) cout<<a[i]<<endl; getch();}

-4-

Prof.Aron Marius, Liceul Teoretic C.A.Rosetti, Catedra de Informatic

2008-2009

III. SORTAREA PRIN INSERIE


cu ajutorul unei varabile citite A(vector) se aranjeaz valorile ntr-o alta B, n ordine cresctoare, procedndu-se astfel: B[1] = A[1] fiecare dintre valorile reinute de componentele de la 2 la n(in ordinea indicilor) se insereaz ntre valorile ordonate deja ale vectorului B. pentru realizarea inserrii unei valori, se parcurge vectorul B de la dreapta la stnga, pn cnd se gsete o component care reine o valoare mai mare/mic, dect cea care se insereaz, sau pn cnd a fost parcurs ntreg vectorul ncepnd cu valoarea reinut de component care va fi ocupat de valoarea inserat, toate valorile reinute se deplaseaz ctre dreapta cu o poziie.

Exemplu:

3 A[1]

1 A[2]

4 A[3]

2 A[4]

3 B[1] B[2] B[3] B[4]

valoarea 1 trebuie inserat naintea valorii 3. Pentru aceasta, 3 se deplaseaz la dreapta cu o poziie i pe poziia sa se insereaz valoarea 1.

3 A[1]

1 A[2] 3 B[2]

4 A[3]

2 A[4]

1 B[1]

B[3]

B[4]

-5-

Prof.Aron Marius, Liceul Teoretic C.A.Rosetti, Catedra de Informatic

2008-2009

valoarea 4 trebuie inserat dup 3. Pentru aceasta nu este necesar sa efectum nici o deplasare

3 A[1]

1 A[2] 3 B[2]

4 A[3] 4 B[3]

2 A[4]

1 B[1]

B[4]

valoarea 2 se insereaz pe poziia ocupat de valoarea 3. Pentru aceasta, valorile 3 i 4 se deplaseaz la dreapta cu cte o poziie

3 A[1]

1 A[2] 2 B[2]

4 A[3] 3 B[3]

2 A[4] 4 B[4]

1 B[1]

vectorul B reine valorile afiate i se vor afia.

#include<iostream.h> #include<conio.h> int a[9],b[9],n,i,j,k,gasit; void main() { cout<<n=;cin>>n; for (i=0;i<n;i++) { cout<<a[<<i+1<<]=;cin>>a[i];}; b[0]=a[0]; for(i=0; i<n;i++) {j=i-1; while(j>=0 && a[i]<b[j]) j--; for(k=i-1; k>=j+1; k--) b[k+1]=b[k]; b[j+1]=a[i];} for(i=0;i<n;i++) cout<<b[i]<<endl; getch();} -6-