Documente Academic
Documente Profesional
Documente Cultură
METODA INSERTIONSORT
Exemplu:
Să ordonăm următorul vector, în care n=5:
int n, X[100];
//citire X[] cu n elemente
for(int i = 1 ; i < n ; i ++)
{
int x = a[i];
int p = i - 1;
while(p >= 0 && a[p] > x)
a[p + 1] = a[p], p --;
a[p + 1] = x;
}
Sau:
Notă:
Pentru a vizualiza fiecare pas al acestei metode accesați link-ul de mai jos:
http://www.cs.armstrong.edu/liang/animation/web/InsertionSort.html
METODA COUNTINGSORT
Sortarea prin numărare (Counting Sort) este o metodă de sortare a vectorilor ce se bazează pe
utilizarea unui vector de frecvență. Acest algoritm de sortare poate fi extrem de eficient în anumite
situații, în funcție de intervalul de valori al elementelor vectorului. Vom considera că vrem să sortăm
un vector v, de lungime n, indexat de la 1 și cu elementele cuprinse între 0 și MAX−1.
Algoritm
Se parcurge vectorul v și se rețin frecvențele elementelor sale în vectorul de frecvență frq.
Se parcurge vectorul frq de la 0 la MAX−1MAX−1, dacă vrem să realizăm o sortare
crescătoare, sau de la MAX−1 la 0 în caz contrar.
Considerăm k noua lungime a vectorului, și o inițializăm cu 0.
Pentru fiecare element frq[i], adăugăm valoarea i la finalul vectorului (pe poziția k, ce mai
întâi este incrementată) de frq[i] ori, pentru că de atâtea ori apare aceasta în v.
Ordinea în care este parcurs vectorul de frecvență ne garantează că elementele vor fi
reintroduse în vector gata sortate.
Exemplu
Implementare în C++
Mai jos este implementarea algoritmului în C++. Nimic special… L-am parcurs pe v de la 1 la n și am
actualizat frecvența (numărul de apariții) ale elementului curent (v[i]) prin frq[v[i]]++. Apoi, l-am
parcurs pe frq de la 0 la MAX−1 (pentru că ăsta e intervalul de valori al elementelor lui v). Pentru
fiecare element frq[i], cât timp e nenul, îl decrementez, incrementez noul capăt al lui v (k), și îl copiez
acolo pe i.
int k = 0;
for (int i = 0; i < MAX; i++)
while (frq[i]--)
v[++k] = i;
Observație:
Sortarea prin numărare nu este un algoritm de sortare prin comparare, deoarece nu se
efectuează nicio comparație între elementele vectorului.
Soluția poate fi adaptată și pentru cazul în care intervalul de valori al lui vv conține și numere
negative.
Dacă nu avem nevoie de forma inițială a vectorului (cea nesortată), putem calcula frecvențele
încă din timpul citirii vectorului. De asemenea, dacă nu trebuie decât să afișăm vectorul sortat,
putem afișa elementele direct în while, fără să mai reconstruim vectorul.
Notă:
Pentru a vizualiza fiecare pas al acestei metode accesați link-ul de mai jos:
https://www.cs.usfca.edu/~galles/visualization/CountingSort.html