1 / 15

Metode-de-sortare in C++

Prezentare PowerPoint. Metode-de-sortare in C++. 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:

vesta
Download Presentation

Metode-de-sortare in C++

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Prezentare PowerPoint Metode-de-sortarein C++

  2. 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 (SelectSort) • Sortarea prin insertie (InsertSort) • Sortarea cu bule (BubbleSort) • Metodele avansate se bazeaza pe algoritmi putin mai complicati dar, care nu necesita cunostinte avansate de algoritmica. Cateva din cele mai cunoscute sunt: • Sortarea rapida (QuickSort) • Sortarea prin interclasare (MergeSort) • Sortarea cu micsorarea incrementului (ShellSort)

  3. Sortarea prin selectie (SelectSort) 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)

  4. 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 }

  5. Sortarea prin insertie (InsertSort) Aceasta metoda aseaza elementul citit pe pozitia lui finala in vector, comparandul cu valorile introduse deja si interschimbandul pana ajunge in pozitia corecta. Exemplu:

  6. 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 }

  7. Metoda bulelor (BubbleSort) Aceasta metoda se rezuma la a compara fiecare element cu celelalte, facandu-se interschimbarea daca elementul mai mare are 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 • Prima parcurgere a tabloului (ok este initializat cu adevarat) 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)

  8. Urmeaza a doua parcurgere a tabloului (ok primeste din nou valoarea adevarat) Am avut interschimbare si de data aceasta,deci iesim cu ok=fals.La acest pas 1.1 a ajuns pe locul sau definitiv. • A treia parcurgere a tabloului incepe cu reinitializarea lui ok cu valoarea adevarat. Am interschimbat 0.08 cu 1.0,cel din urma astfel a ajuns pe locul sau in sirul ordonat. • 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.

  9. Codul in C++ al algoritmului de sortare prin metoda bulelor int main() { int v[100],i,n,gasit,aux; cin>>n; for(i=1i<=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 }

  10. Sortarea rapida (QuickSort) In practica algoritmul de sortare cel mai rapid este QuickSort numita sortare rapida,care foloseste partitionarea ca idee de baza. Metoda QuickSort presupune gasirea pozitiei finale pe care o ocupa elementul de pe prima pozitie comparandu-l cu elementele din cealalta partitie a tabelului,acest,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 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 5 7 3 14 7 26 12 1 2 3 5 7 7 12 14 26

  11. Codul in C++ al algoritmului de sortare rapida (QuickSort) int v[100],n,k; int poz(int li,int ls,int &k,int v[100]) { int i=li,j=ls,c,i1=0,j1=-1; while(i<j) { if(v[i]>v[j]) { c=v[j]; v[j]=v[i]; v[i]=c; c=i1; i1=-j1; j1=c; } i=i+i1; j=j+j1; } 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]<<“ “; }

  12. Sortarea prin interclasare (MergeSort) 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:

  13. Codul in C++ al algoritmului de sortare prin interclasare (MergeSort) 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; } } int 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(); }

  14. Sortarea cu micsorarea incrementului (ShellSort) 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.

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

More Related