Prezentare Power Point METODEDESORTARE IN C Clasificare Metodele

  • Slides: 15
Download presentation
Prezentare Power. Point METODE-DESORTARE IN C++

Prezentare Power. Point METODE-DESORTARE IN C++

Clasificare Ø Metodele de sortare se clasifica in: ○ Metode directe ○ Metode avansate

Clasificare Ø Metodele de sortare se clasifica in: ○ Metode directe ○ Metode avansate Ø Metodele directe se bazeaza pe algoritmi de dificultate redusa, usor de gasit si de inteles. Metodele directe pe care le vom lua in considerare: ○ ○ ○ Ø Sortarea prin selectie (Select. Sort) Sortarea prin insertie (Insert. Sort) Sortarea cu bule (Bubble. Sort) Metodele avansate se bazeaza pe algoritmi putin mai complicati dar, care nu necesita cunostinte avansate de algoritmica. Cateva din cele mai cunoscute sunt: o Sortarea rapida (Quick. Sort) o Sortarea prin interclasare (Merge. Sort) o Sortarea cu micsorarea incrementului (Shell. Sort)

Sortarea prin selectie (Select. Sort) Sortarea prin selectia minimului (sau maximului) este metoda de

Sortarea prin selectie (Select. Sort) Sortarea prin selectia minimului (sau maximului) este metoda de ordonare prin selectarea unui element si plasarea lui pe pozitia sa finala direct in tabloul A. Exemplu: Fie tabloul A=(5, 0, 8, 7, 3) Elementul Pozitia Noul Pasul Tabloul A minimului tablou A i=1 (5, 0, 8, 7, 3) 0 2 (0, 5, 8, 7, 3) i=2 (0, 5, 8, 7, 3) 3 5 (0, 3, 8, 7, 5) i=3 (0, 3, 8, 7, 5) 5 5 (0, 3, 5, 7, 8) i=4 (0, 3, 5, 7, 8) 7 4

Codul in C++ al algoritmului de sortare prin selectie Int main() { int n,

Codul in C++ al algoritmului de sortare prin selectie Int main() { int n, a[100], i, j, k, max, min; cin>>n; for(i=0; i<n; i++) se citesc datele de intrare { cout<<“a[“<<i<<“]=“; cin>>a[i]; } for(i=0; i<n; i++) { min=a[i]; k=i; for(j=i+1; j<n; j++) if(a[j]<min) { se sorteaza vectorul min=a[j]; k=j; } max=a[j]; a[k]=a[i]; a[i]=max; } for(i=0; i<n; i++) cout<<a[i]<<“ “; se afiseaza rezultatele }

Sortarea prin insertie (Insert. Sort) Aceasta metoda aseaza elementul citit pe pozitia lui finala

Sortarea prin insertie (Insert. Sort) Aceasta metoda aseaza elementul citit pe pozitia lui finala in vector, comparandul cu valorile introduse deja si interschimbandul pana ajunge in pozitia corecta. Exemplu: a 1 a 2 a 3 a 4 a 5 a 6 5 2 4 6 1 3 2 5 4 6 1 3 2 4 5 6 1 3 1 2 4 5 6 3 1 2 3 4 5 6

Codul in C++ al algoritmului de sortare prin insertie int main() { int v[100],

Codul in C++ al algoritmului de sortare prin insertie int main() { int v[100], j, n, i, aux; cin>>n; se citesc datele de intrare cin>>v[1]; for(i=2; i<=n; i++) { cout<<v”[“<<i<<“]=“; cin>>v[i]; j=i; while(v[j]<v[j-1]&&j>1) { se sorteaza vectorul aux=v[j]; v[j]=v[j-1]; v[j-1]=aux; j--; } } for(i=1; i<=n; i++) cout<<v[i]<<“ “; se afiseaza rezultatele }

Metoda bulelor (Bubble. Sort) Aceasta metoda se rezuma la a compara fiecare element cu

Metoda bulelor (Bubble. Sort) Aceasta metoda se rezuma la a compara fiecare element cu celelalte, facandu-se interschimbarea daca elementul mai mare indexul mai mix. Este cea mai simpla metoda de sortare si nu necesita cunoasterea detaliata a limbajului de programare. Poate fi folosita cu succes de catre incepatori. Exemplu: Consideram tabloul A cu 5 elemente numere reale: 0. 0, 1, 1, 1. 2 si 0. 08 I. Prima parcurgere a tabloului (ok este initializat cu adevarat) a 1=0. 0 a 2=1. 1 a 3=1. 0 a 4=1. 2 a 5=0. 08 ok 0. 0 1. 1 1. 2 0. 08 fals 0. 0 1. 1 0. 08 1. 2 fals Valorile 0. 0 <1. 1 raman neschimbate, 1. 1>1. 0 le interschimbam. Deoarece 1. 1<1. 2, avansam si constatam ca 1. 2>0. 08, deci din nou avem interschimbare. In consecinta, la iesire din structura pentru ok este fals. Observam ca 1. 2 a ajuns pe locul lui definitiv(elementul maxim)

Urmeaza a doua parcurgere a tabloului (ok primeste din nou valoarea adevarat) II. a

Urmeaza a doua parcurgere a tabloului (ok primeste din nou valoarea adevarat) II. a 1=0. 0 a 2=1. 0 a 3=1. 1 a 4=0. 08 a 5=1. 2 ok 0. 0 1. 0 0. 08 1. 1 1. 2 fals Am avut interschimbare si de data aceasta, deci iesim cu ok=fals. La acest pas 1. 1 a ajuns pe locul sau definitiv. III. A treia parcurgere a tabloului incepe cu reinitializarea lui ok cu valoarea adevarat. a 1=0. 0 a 2=0. 08 a 3=1. 0 a 4=1. 1 a 5=1. 2 ok 0. 08 1. 0 1. 1 1. 2 fals Am interschimbat 0. 08 cu 1. 0, cel din urma astfel a ajuns pe locul sau in sirul ordonat. IV. A patra parcurgere a tabloului se finalizeaza cu valoarea ok-adevarat, deoarece nu am efectuat nici o interchimbare, ceea ce inseamna ca procesul de ordonare s-a inceiat. a 1=0. 0 a 2=0. 08 a 3=1. 0 a 4=1. 1 a 5=1. 2 ok 0. 08 1. 0 1. 1 1. 2 adevarat

Codul in C++ al algoritmului de sortare prin metoda bulelor int main() { int

Codul in C++ al algoritmului de sortare prin metoda bulelor int main() { int v[100], i, n, gasit, aux; cin>>n; for(i=1 i<=n; i++) { se citesc datele de intrare cout<<“v[“<<i<<“]=“; cin>>v[i]; } do { gasit=0; for(i=1; i<=n; i++) if(v[i]>v[i+1]) { aux=v[i]; se sorteaza vectorul v[i]=v[i+1]; v[i+1]=aux; gasit=1; } } while(gasit==1); for(i=1; i<=n; i++) cout<<v[i]<<“ “; se afiseza rezultatele }

Sortarea rapida (Quick. Sort) In practica algoritmul de sortare cel mai rapid este Quick.

Sortarea rapida (Quick. Sort) In practica algoritmul de sortare cel mai rapid este Quick. Sort numita sortare rapida, care foloseste partitionarea ca idee de baza. Metoda Quick. Sort presupune gasirea pozitiei finale pe care o ocupa elementul de pe prima pozitie comparandu-l cu elementele din cealalta partitie a tabelului, acest algoritm realizandu-se pana cand partitia are 1 element. Exemplu: Vectorul A cu elementele 1, 12, 5, 26, 7, 14, 3, 7, 2 1 12 5 26 7 14 3 7 2 1 2 5 26 7 14 3 7 12 1 2 5 7 7 14 3 26 12 1 2 5 7 3 14 7 26 12 1 2 3 5 7 7 12 14 26

Codul in C++ al algoritmului de sortare rapida (Quick. Sort) int v[100], n, k;

Codul in C++ al algoritmului de sortare rapida (Quick. Sort) int v[100], n, k; int poz(int li, int ls, int &k, int v[100]) { int i=li, j=ls, c, i 1=0, j 1=-1; while(i<j) { if(v[i]>v[j]) { c=v[j]; c=i 1; } i=i+i 1; j=j+j 1; } k=i; } int quick(int li, int ls) { if(li<ls) { poz(li, ls, k, v); quick(li, k-1); quick(k+1, ls); } } int main() { int i; cin>>i; for(i=1; i<=n; i++) cin>>v[i]; quick(1, n); for(i=1; i<=n; i++) cout<<v[i]<<“ “; } v[j]=v[i]; i 1=-j 1; v[i]=c; j 1=c;

Sortarea prin interclasare (Merge. Sort) Algoritmul de sortare prin interclasare se bazeaza pe urmatoarea

Sortarea prin interclasare (Merge. Sort) Algoritmul de sortare prin interclasare se bazeaza pe urmatoarea idee: pentru a sorta o tabela cu N elemente il impartim in doua tabele pe care le sortez separat si le interclasam. Este o metoda de sortare care foloseste strategia de baza “divide et impera” , conform careia problema se descompune in alte doua subprobleme de acelasi tip si dupa rezolvarea lor rezultatele se combina. Algoritmul sorteaza elementele in ordine crescatoare. Tabelul se imparte in n/2, dupa aceea tabelele se impart in jumatate, tot asa pana cand tabelele formate au mai putin sau cel mult de k elemente. Exemplu: Sir ordonat 12234566 2456 25 5 1236 46 2 4 13 6 1 26 3 2 6

Codul in C++ al algoritmului de sortare prin interclasare (Merge. Sort) int v[1000], n;

Codul in C++ al algoritmului de sortare prin interclasare (Merge. Sort) int v[1000], n; int citire() {int i; cin>>n; for(i=1; i<=n; i++) cin>>v[i]; } int afis() {int i; for(i=1; i<=n; i++) cout<<v[i]<<" "; cin>>i; } int ordo(int p, int u) {int aux; if(v[p]>v[u]) {aux=v[p]; v[p]=v[u]; v[u]=aux; } } interclas(int p, int u, int m) {int i, j, a[1000], k=0; i=p; j=m+1; while(i<=m && j<=u) if(v[i]<v[j]) {k++; a[k]=v[i]; i++; } else {k++; a[k]=v[j]; j++; } if(i<=m) for(j=i; j<=m; j++) {k++; a[k]=v[j]; } else for(i=j; i<=u; i++) {k++; a[k]=v[i]; } for(i=1; i<=k; i++) v[p+i-1]=a[i]; } int divide(int p, int u) {int m; if(u-p<=1) ordo(p, u); else {m=(p+u)/2; divide(p, m); divide(m+1, u); interclas(p, u, m); } } int main () {citire(); divide(1, n); afis(); }

Sortarea cu micsorarea incrementului (Shell. Sort) Sortarea cu micsorarea incrementului (shellsort) este o extensie

Sortarea cu micsorarea incrementului (Shell. Sort) Sortarea cu micsorarea incrementului (shellsort) este o extensie simplã al Insertion sortului care câstigã vitezã permitând schimbarea elementelor aflate departe. Shellsort necesitã mai multi pasi fatã de Insertion sort, dar la fiecare pas elementele efectuazã salturi lungi spre pozitia corectã. Ø Exemplu-1. Ø Exemplu-2.

Prezentare realizata de -Ebîncă Cristian-Gabriel ~SFARSIT~

Prezentare realizata de -Ebîncă Cristian-Gabriel ~SFARSIT~