Documente Academic
Documente Profesional
Documente Cultură
Sortari
Cuprins
1. Metoda sortării rapide (QuickSort)
2. Metoda sortării cu micșorarea incrementului (Metoda Shell)
3. Sortare pe baza rădăcinii (radix sort)
4. Sortare prin cupe (Bucket Sort)
5. Metoda de sortare Heap
6. Metoda de sortare prin numărare - Tema
• strategia are la bază o tehnică de tip "divide et impera" (sunt mai ușor de sortat două tabele mici, decât o tabelă
mare)
• foloseste partiţionarea ca idee de bază
• caracteristici:
– eficient pentru fișiere sau tabele mari,
– ineficient pentru cele de mici dimensiuni.
– ușor de implementat,
– consumă mai puţine resurse decât orice altă metodă de sortare.
– algoritm dependent de ordinea datelor de intrare
Descriere metoda:
• Având o tabelă A cu N elemente, alegem o cheie pivot v în jurul căreia rearanjăm elementele.
• Pivotul poate fi ales în mai multe moduri. O modalitate simplă ar fi să alegem ca pivot primul element.
• După ce avem pivotul, partiţionăm tabela.
• Prin partiţionare:
– toate elementele cu chei mai mici decât pivotul le vom plasa în partea stângă a tabelei,
– iar elementele cu chei mai mari decât pivotul în partiţia dreaptă.
• După aceea apelăm recursiv algoritmul de sortare rapidă relativ la cele două subtabele formate prin
partiţionare.
Se consideră următoarea schemă de comparaţie-interschimb:
• folosindu-se 2 indicatori i, j, cu valorile iniţiale i = 1 și j = N,
• se compară înregistrarea cu numărul de ordine i cu înregistrarea cu numărul de ordine j;
• algoritmul mută:
– pe i la dreapta, până când găsește o cheie mai mare decât pivotul v
– si mută pe j la stânga până când găsește o cheie mai mică decât pivotul v.
• dacă nu este necesară interschimbarea, se decrementează j cu 1 si se repetă procesul de comparaţie;
• dacă apare un interschimb, se incrementează i cu 1 si se continuă compararea, mărind i până la apariţia unui
nou interschimb;
• apoi se decrementează j, continuându-se acest proces de numit "ardere a lumânării la ambele capete", până
când i >= j.
• procedura se apelează recursiv printr-un apel de forma: SORTARE_Rapida(A, 1, N);
Exemplu:
Indicatii cod:
- biblioteci else
{
int poz(float *x,int p,int u) i+=di;
{ int i,j,l,di,dj; j+=dj;
float v; }
//di, dj: pasii de incrementare pentru i si j; ei indica return i;
sensul parcurgerii }
• ideea de bază - rearanjarea elementelor din tabela A astfel încât, luând fiecare al h-lea element
(începând de oriunde), să obţinem o tabelă sortată => spunem că tabela este h-sortată.
Exemplu:
Sortarea tabelei A algoritmul de sortare Shell, în ordine crescătoare.
A = 11,10,9,8,7,6,5,4,3,2,1,0; n=12
Indicatii cod:
- biblioteci
Exemplu:
n=10
A=
{
5436,
4578,
8654,
1027,
9862,
2456,
5874,
2357,
0125,
6921
}
Indicatii cod:
Radix_Sort(a, n, d)
pentru i=1:d
aplică o metodă stabilă pentru sortare după cifra i
4. Sortare prin cupe (Bucket Sort)
Indicatii cod:
Sortare_cupe(a, n)
pentru i=1:n
copiază a[i] în cupa corespunzatoare
Exemplu*
- se da un număr de elemente si un tablou unidimensional:
• ex: n=5
• v = 4, 10, 3,5,1 cu i=0,4
- pe baza heap-ului creat se realizeaza Max Heap-ul pentru sortarea elementelor in ordine crescatoare
• in Max Heap parintele este mereu mai mare sau egal cu copii lui
• cum condiţia ca toţi parintii sa aiba copii mai mici este îndeplinita, atunci se interschimba primul nod
(10) cu ultimul (1) din cadrul arborelui
• cum condiţia ca toţi parintii sa aiba copii mai mici este îndeplinita, atunci se interschimba primul nod
(5) cu ultimul (1) din cadrul arborelui
• cum condiţia ca toţi parintii sa aiba copii mai mici este îndeplinita, atunci se interschimba primul nod
(4) cu ultimul din cadrul arborelui (3)
• arborele ramas este deja unul sortat, deci se interschimba primul element (3) cu ultimul (1)