18
Sortari interne - caracteristici generale • in aceleasi locatii (nr. minim de locatii suplimentare) • operatia de baza - compararea cheilor

1.2

Embed Size (px)

DESCRIPTION

ceva de asd

Citation preview

  • Sortari interne - caracteristici generalein aceleasi locatii (nr. minim de locatii suplimentare)

    operatia de baza - compararea cheilor

  • Sortari interne - algoritmiiS. prin insertie directa

    S. prin selectie directa (a min. sau max.)

    S. prin interschimbare directa (BubbleSort)

  • Sortari interne - algoritmiiS. prin insertie directasortarea prin insertie cu micsorarea incrementului (ShellSort)S. prin selectie directa (a min. sau max.)sortarea prin selectie folosind structuri arborescente (ansamble=heap)(HeapSort)S. prin interschimbare directa (BubbleSort)sortarea prin interschimbare folosind partitii (QuickSort)

  • Sortarea prin insertie directapas iterativ (1): se ia componenta A[2] i se insereaz la locul ei n vectorul sortat de lungime 1, A[1], producnd un vector sortat de lungime 2. pas iterativ (i): (pas) vectorul este mprit n dou pri: A[1], , A[i] este sortat cresctor i se numete destinaie, iar A[i+1], , A[n] este nc nesortat i se va numi surs. Se ia prima component din surs, A[i+1], i se caut s se insereze la locul ei n destinaie. Cutarea locului lui A[i+1] n destinaie se face linear, parcurgnd destinaia de la dreapta la stnga i mutnd pe rnd cte o poziie la dreapta componentele care sunt mai mari dect valoarea de inserat, pn cnd gsim locul valorii x = A[i+1] i o inserm.

  • Sortarea prin insertie directaprocedure InsDir (A){sortare prin insertie directa a vectorului A[1..n]}for i:= 2 to n dox:= A[i];{se caut locul valorii x n destinaie}j:= i- 1;while (j > 0) and (x < A[j]) doA[j+1]:= A[j]j:= j- 1 endwhile{inserarea lui x la locul lui}A[j+1]:= xendforendproc.

  • Sortarea prin insertie directa (cont.)procedure InsDir1(A) {s. prin insertie directa a vectorului A[1..n] cu componenta marcaj A[0]}

    for i:= 2 to n do{se introduce valoarea n componenta marcaj}A[0]:= A[i];{se caut locul valorii n destinaie}j:= i-1;while (A[0] < A[j]) doA[j+1]:= A[j]j:= j-1endwhileA[j+1]:= A[0]endforendproc.

  • Sortarea prin insertie directa - complexitateLa fiecare pas iterativ i (cu i=1,,n-1) al algoritmului, cnd se insereaz componenta A[i+1] la locul ei n destinaie - notm cu Ci numrul de comparaii efectuat (presupunem c lucrm pe variante cu component marcaj, deci avem cte o singur comparaie ce controleaz ciclul while care caut locul inserrii efectund i mutri). Ci poate atinge o valoare maxim, i+1, dac valoarea de inserat este cea mai mic i va veni pe prima component a sursei; poate atinge o valoare minim, i anume 1, dac valoarea de inserat este cea mai mare i poziia ei va fi ultima din noua surs, iar valoarea medie a lui Ci va fi i/2.- notm cu Mi numrul de mutri efectuat de algoritm la pasul iterativ i, avem relaia Mi=Ci+1 ntre mutri i comparaii

  • Sortarea prin insertie directa - complexitateCmin= 1 + 1 + + 1 = n-1 pas 1 pas 2 pas n-1Mmin= 2 + 2 + + 2 = 2(n-1) pas 1 pas 2 pas n-1

  • Sortarea prin selecie directa a minimului

    pas iterativ (i): (pas) vectorul este mprit n dou pri: destinaia A[1..i-1] ce conine minime puse la locul lor de paii anteriori, i sursa A[i..n], pe care se efectueaz o pas, adic se caut secvenial minimul din subvectorul surs i apoi se interschimb cu componenta A[i]. dimensiunea destinaiei crete cu 1, iar a sursei scade corespunztor. Dup n-1 pai iterativi vectorul A va fi sortat cresctor.

  • Sortarea prin selecie directa a minimuluiprocedure SelDir(A)for i:= 1 to n-1 do{cutarea secvenial a minimului n A[i..n] }k:= i; min:= A[i]; {iniializarea minimului}for j:= i+1 to n doif A[j]
  • Sortarea prin selecie directa - complexitatenumrul de comparaii este independent de ordinea iniial a componentelor

    Mmin=3+3++3=3(n-1).

  • Sortarea prin interschimbare directa(pas) parcurgem vectorul de la dreapta la stnga comparnd dou elemente succesive A[i-1] i A[i]; dac A[i-1] A[i] le lsm pe loc, dac A[i-1] > A[i] le interschimbm.pas iterativ (i): vectorul este mprit n dou pri: destinaia A[1..i-1] cela mai mici i-1 valori puse la locul lor de paii anteriorisursa A[i..n], pe care se efectueaz o pas, de la dreapta spre stnga, rezultat impingerea minimului din sursa pe A[i].dimensiunea destinaiei crete cu 1, iar a sursei scade corespunztor. Dup n-1 pai iterativi vectorul A va fi sortat cresctor.

  • Sortarea prin interschimbare directaprocedure InterschDir(A)for j:=2 to n dofor i:=n downto j doif A[i-1] > A[i] then interschimb (A[i-1], A[i])endifendforendforendproc.

  • Sortarea prin interschimbare directa-modificari- posibilitatea reducerii numrului de pai iterativi dac la o pas nu se face nici o interschimbare, atunci sursa este sortat i, cum i destinaia este, nseamn c ntregul vector A este sortat i este inutil s mai relum pasele- scurtarea lungimii paselors inem minte, nu numai faptul c s-au fcut efectiv interschimbri, dar i locul unde s-a efectuat ultima interschimbare. Din acest loc, pn la destinaie, avem de-a face cu o bucat sortat, deci e suficient s relum pasa urmtoare de la n i pn aici. Dac ultima interschimbare s-a fcut ntre A[k-1] i A[k], atunci sursa pentru pasul urmtor va fi A[k+1..n]. Se schimb deci i lungimea surselor

  • Sortarea prin interschimbare directa-complexitatenumrul de comparaii pe care-l face algoritmul la fiecare pas iterativ i este determinat de lungimea subvectorului surs A[i..n] pe care se face o pas i este independent de ordinea cheilor. La pasul i algoritmul face Ci = n-1 comparaii

    Mmin=0.

  • Sortare Shell - s. prin insertie cu micsorarea incrementuluin 1959 D.L. Shell a propus un algoritm de sortare bazat pe metoda prin inserie direct, algoritm cu o performan mbuntit deoarece face comparaii ntre chei mai distanate din vector. Algoritmul sorteaz mai nti prin inserie subvectori obinui din vectorul iniial prin extragerea componentelor aflate la o distan h una de cealalt, distan care se numete increment. Repetnd procedeul pentru incremeni din ce n ce mai mici i, n final, pentru incrementul 1, se obine vectorul sortat.

  • Sortare Shell - s. prin insertie cu micsorarea incrementuluise consider un ir descresctor de numere naturale, numite incremeni dintre care ultimul, ht, este 1:h1 > h2 > > hi > hi+1 > > ht = 1.(1) Se pornete cu incrementul h1.(2) La pasul iterativ m se consider incrementul hm . Se sorteaz prin inserie direct subvectorii obinui din vectorul inial lund elemente aflate la distana hm, adic subvectorii:A[1], A[hm+1], A[2hm+1], A[2], A[hm+2], A[hm], A[2hm], Apoi se reia pasul (2) pentru incrementul hm+1.Deoarece ultimul increment este ht=1, ultimul pas iterativ t se reduce la sortarea prin inserie direct, deci vectorul va fi sortat.

  • Sortare Shell - s. prin insertie cu micsorarea incrementuluiD. E. Knuth recomand incremeni obinui cu urmtoarele formule recursive: i , , avem 1, 4, 13, 40, i , , avem 1, 3, 15, 31,

    Exist o estimare a complexitii acestui algoritm care-l plaseaz n clasa O(n1,3) ,din punct de vedere al numrului de comparaii. Din punct de vedere al spaiului, am vzut c el necesit h(1) locaii suplimentare pentru componentele marcaj, cu ajutorul crora eliminm testele de nedepire a dimensiunii, teste care ar dubla numrul de comparaii.