Tehnici de sortare
1. 2. 3. 4. 5.
Principiile sortrii Sortare prin interschimbare Sortare prin inserie Sortare prin partiionare Concluzii
Principiile sortrii
Sortarea const n ordonarea unei mulimi de elemente, cu scopul de a facilita cutarea ulterioar a unui element dat. Elementele sortate pot fi, la modul general, structuri de urmtorul tip: typedef struct { int key; ... /*alte cmpuri*/ } element;
Principiile sortrii
Fiind dat irul de elemente de tipul definit mai sus, n forma iniial: a1, a2, ..., an prin sortare se nelege permutarea elementelor ntr-o anumit ordine: ak1, ak2, ..., akn astfel nct irul cheilor s devin monoton cresctor: ak1.key ak2.key ..., akn.key Cmpul cheie (key) a fost considerat, pentru simplificare, de tip ntreg n realitate el putnd fi de orice tip scalar.
Principiile sortrii
Elementele sortate pot fi componente ale mai multor feluri de structuri de date, att statice (tablouri, fiiere) ct i dinamice (liste). Problemele prezentate n continuare sunt tipice pentru sortarea tablourilor. n cazul sortrii tablourilor sunt posibile dou variante de abordare principial diferite: sortarea tabloului iniial (in-place); construirea unui nou tablou, ca rezultat al sortrii tabloului iniial. Aceast variant necesit un surplus de memorie i, din aceast cauz, nu se utilizeaz dect atunci cnd n problem este necesar pstrarea tabloului iniial.
Principiile sortrii
Eficien i complexitate
Eficiena unui algoritm de sortare se apreciaz n funcie de timpul de execuie pe care l necesit. Indicatorii specifici pentru aprecierea cantitativ a eficienei algoritmului sunt: numrul comparrilor de chei (notat C); numrul de mutri de elemente (notat M). Ambii indicatori depind de numrul total n, al elementelor sortate. Din punct de vedere al complexitii lor, tehnicile de sortare pot fi: simple sau directe, caz n care att C ct i M sunt aproximativ proporionali (de acelai ordin de mrime cu) n2: (n2) avansate, caz n care C i M sunt de ordinul de mrime al lui nlog2n: (nlog2n)
Principiile sortrii
Eficien i complexitate
Ctigul de eficien este ilustrat de raportul n2/(nlog2n). Exemple : n=64 log2n=6 n2/(nlog2n) = 10 n=1024 log2n=10 n2/(nlog2n) = 100 n=32768 log2n=15 n2/(nlog2n) = 2000 Dei ameliorarea este substanial, tehnicile de sortare directe prezint n continuare interes din urmtoarele motive: sunt foarte potrivite pentru explicitarea principiilor sortrii; programele rezultate sunt scurte i uor de neles; sunt eficiente pentru valori mici ale lui n.
Principiile sortrii
Tehnici i metode
Se pot identifica mai multe categorii de tehnici de sortare, i anume: Sortarea prin inserie Sortarea prin selecie Sortarea prin interschimbare Sortarea prin partiionare ...
i=3 1 2 4 7 Se observ un dezavantaj major al metodei : n cazul n care elementele se ordoneaz mai repede, ultimele treceri prin tablou rmn fr efect. Exemplul cel mai defavorabil este irul gata sortat. O prezumtiv mbuntire s-ar putea obine dac se marcheaz faptul c a avut loc, sau nu, vreo interschimbare pe parcursul unei trecerii.
iniial 4 2 7 1 1 4 2 7 1 2 4 7
Concluzii
Aplicaii ale tehnicile de sortare
cutri eficiente teste de unicitate eliminarea dublurilor selectarea dup diverse criterii determinarea frecvenelor de apariie refacerea ordinii iniiale reuniunea i intersecia mulimilor ...
Concluzii
Ce tehnici aplicm i cnd anume ?
Ce algoritmi de sortare folosim n practic ? pn la 1000 de elemente sunt foarte bune i metodele directe pn la 5000 de elemente se recomand Shellsort (dup Sedgewick) Quicksort este performant dac datele sunt aleatoare