Sunteți pe pagina 1din 24

Categorii:

2
A. Sortari cu algoritmi elementari , complexitate = O( 𝑛 )
a. Bubble sort
b. Selection sort
c. Insertion sort
B. Sortari divide et impera, complexitate = O(nlog(n))
a. Merge sort
b. Quicksort
C. Sortari radix & bucket sort

Complexitate:
IMAGINI
BUBBLE SORT

Sursa: https://www.faceprep.in/c/bubble-sort-in-c/
SELECTION SORT

Sursa: https://www.programmingsimplified.com/c/source-code/c-program-selection-sort
INSERTION SORT

Ce e cu mov: e gata sortat

Luam cate un element din partea nesortata și il inseram in partea sortata.


MERGE SORT

https://www.101computing.net/merge-sort-algorithm/
QUICK SORT

Alegem un element, asa numit pivot. Pivotul poate avea urmatoarele pozitii: in mijloc, la inceput sau
la final. De exemplu, aici pivotul este la mijloc. In exercitiile de la curs pozitia pivotului este la final.

Se tot imparte in submultimi cu numere>pivot respetiv <pivot , pana cand nu mai avem ce imparti și
multimea este sortata.

RADIX SORT
COUNTING SORT

Vezi codul din laborator.

VIDEO
https://www.youtube.com/watch?v=7zuGmKfUt7s

https://www.youtube.com/watch?v=OGzPmgsI-pQ

https://www.youtube.com/watch?v=ywWBy6J5gz8

https://www.youtube.com/watch?v=Z3dCjzhjAWA

https://www.youtube.com/watch?v=4VqmGXwpLqc

Bucket Sort | GeeksforGeeks - YouTube

Radix Sort | GeeksforGeeks - YouTube

(puteti cauta și altele pe youtube/alte website-uri)

Explicatii curs

Sortare cu Algoritmi simpli


BUBBLE SORT

55, 22, 78, 99, 35, 11, 17, 31, 9, 5, 47

- se parcurge lista de la stanga la dreapta, comparand elementele doua cate doua.


Cand nu se respecta relatia (de ex < pt ordonare crescatoare) se face schimbul intre cele doua
elemente si se continua pana la sfarsitul listei.

- se reia pentru pentru i urmator

i=0

? 55 < 22 - NU => schimb 55 cu 22

22, 55, 78, 99, 35, 11, 17, 31, 9, 5, 47

? 55 < 78 - DA - trec mai departe

? 78 < 99 - DA - trec mai departe

? 99 < 35 - NU => schimb 99 cu 35

22, 55, 78, 35, 99, 11, 17, 31, 9, 5, 47

? 99 < 11 - NU => schimb 99 cu 11

22, 55, 78, 35, 11, 99, 17, 31, 9, 5, 47

? 99 < 17 - NU => schimb 99 cu 17

22, 55, 78, 35, 11, 17, 99, 31, 9, 5, 47

? 99 < 31 - NU => schimb 99 cu 31

22, 55, 78, 35, 11, 17, 31, 99, 9, 5, 47

? 99 < 9 - NU => schimb 99 cu 9


22, 55, 78, 35, 11, 17, 31, 9, 99, 5, 47

? 99 < 5 - NU => schimb 99 cu 5

22, 55, 78, 35, 11, 17, 31, 9, 5, 99, 47

? 99 < 47 - NU => schimb 99 cu 47

22, 55, 78, 35, 11, 17, 31, 9, 5, 47, 99 Final pt i=0

i=1

? 22 < 55 - DA - trec mai departe

? 55 < 78 - DA - trec mai departe

? 78 < 35 - NU => schimb 78 cu 35

22, 55, 35, 78, 11, 17, 31, 9, 5, 47, 99

? 78 < 11 - NU => schimb 78 cu 11

22, 55, 35, 11, 78, 17, 31, 9, 5, 47, 99

22, 55, 35, 11, 17, 78, 31, 9, 5, 47, 99

22, 55, 35, 11, 17, 31, 78, 9, 5, 47, 99

22, 55, 35, 11, 17, 31, 9, 78, 5, 47, 99

22, 55, 35, 11, 17, 31, 9, 5, 78, 47, 99

22, 55, 35, 11, 17, 31, 9, 5, 47, 78, 99 ? 78 < 99 DA - am ajuns la final pt i = 1
i=2

22, 35, 11, 17, 31, 9, 5, 47, 55, 78, 99

i=3

22, 11, 17, 31, 9, 5, 35, 47, 55, 78, 99

i=4

11, 17, 22, 9, 5, 31, 35, 47, 55, 78, 99

i=5

11, 17, 9, 5, 22, 31, 35, 47, 55, 78, 99

i=6

11, 9, 5, 17, 22, 31, 35, 47, 55, 78, 99

i=7

9, 11, 5, 17, 22, 31, 35, 47, 55, 78, 99


i=8

9, 5, 11, 17, 22, 31, 35, 47, 55, 78, 99

i=9

5, 9, 11, 17, 22, 31, 35, 47, 55, 78, 99

i = 10

5, 9, 11, 17, 22, 31, 35, 47, 55, 78, 99

SELECTION SORT

1 - se considera ca minimul fiind pe poz. 0 (pozitia curenta)

2 - se calculeaza minimul elementelor din lista (fara positia curenta)

3 - se compara elementul de pe pozitia curenta cu elementul minim si daca e mai mare, se face
schimbul intre cele doua elem.

4 - se trece la elementul urmator din lista (poz 1 = poz curenta) care e considerat ca fiind minim

5 - se reiau pasii 2, 3, 4 pana se ajunge la sfarsitul listei

OBS

- lista va fi divizata in doua subliste: una sortata (stanga) si una nesortata (dreapta)

55, {22, 78, 99, 35, 11, 17, 31, 9, 5, 47}


i = 0,

min = 55, min_calc = 5

55 > 5 => schimb 55 cu 5

{5,} 22, {78, 99, 35, 11, 17, 31, 9, 55, 47}

i=1

min = 22, min_calc = 9

22 > 9 => schimb 22 cu 9

{5, 9}, 78, {99, 35, 11, 17, 31, 22, 55, 47}

i=2

min = 78, min_calc = 11

78 > 11 => schimb 78 cu 11

{5, 9, 11}, 99, {35, 78, 17, 31, 22, 55, 47}

i=3

min = 99, min_calc = 17

99 > 17 => schimb 99 cu 17

{5, 9, 11, 17}, 35, {78, 99, 31, 22, 55, 47}
i=4

min = 35, min_calc = 22

35 > 22 => schimb 35 cu 22

{5, 9, 11, 17, 22}, 78, {99, 31, 35, 55, 47}

i=5

min = 78, min_calc = 31

78 > 31 => schimb 78 cu 31

{5, 9, 11, 17, 22, 31}, 99, {78, 35, 55, 47}

i=6

min = 99, min_calc = 35

99 > 35 => schimb 99 cu 35

{5, 9, 11, 17, 22, 31, 35}, 78, {99, 55, 47}

i=7

min = 78, min_calc = 47

78 > 47 => schimb 78 cu 47

{5, 9, 11, 17, 22, 31, 35, 47}, 99, {55, 78}
i=8

min = 99, min_calc = 55

99 > 55 => schimb 99 cu 55

{5, 9, 11, 17, 22, 31, 35, 47, 55}, 99, {78}

i=9

min = 99, min_calc = 78

99 > 78 => schimb 99 cu 78

5, 9, 11, 17, 22, 31, 35, 47, 55, 78, {99}

i = 10

5, 9, 11, 17, 22, 31, 35, 47, 55, 78, 99

INSERTION SORT

- lista va fi divizata in 2 subliste: una partial ordonata (stanga) si alta neordonata (dreapta)

- se incepe de la pozitia i + 1 si se parcurge lista partial ordonata (stanga) de la dreapta la stanga,

incercand prin comparatii sa ii gasim locul in aceasta lista


55, 22, 78, 99, 35, 11, 17, 31, 9, 5, 47

i=0

{55}, 22, {78, 99, 35, 11, 17, 31, 9, 5, 47}

22 < 55

{22, 55}, {78, 99, 35, 11, 17, 31, 9, 5, 47}

i=1

{22, 55}, 78, {99, 35, 11, 17, 31, 9, 5, 47}

78 > 55

{22, 55, 78}, {99, 35, 11, 17, 31, 9, 5, 47}

i=2

{22, 55, 78}, 99, {35, 11, 17, 31, 9, 5, 47}

99 > 78

{22, 55, 78, 99}, {35, 11, 17, 31, 9, 5, 47}

i=3

{22, 55, 78, 99}, 35, {11, 17, 31, 9, 5, 47}

35 < 99; 35 < 78; 35 < 55; 35 > 22

{22, 35, 55, 78, 99}, {11, 17, 31, 9, 5, 47}

i=4
{22, 35, 55, 78, 99}, 11, {17, 31, 9, 5, 47}

11 < 99; 11 < 78; 11 < 55; 11 < 35; 11 < 22;

{11, 22, 35, 55, 78, 99}, {17, 31, 9, 5, 47}

i=5

{11, 22, 35, 55, 78, 99}, 17, {31, 9, 5, 47}

17 < 99; 17 < 78; 17 < 55; 17 < 35; 17 < 22; 17 > 11;

{11, 17, 22, 35, 55, 78, 99}, {31, 9, 5, 47}

i=6

{11, 17, 22, 35, 55, 78, 99}, 31, {9, 5, 47}

31 < 99; 31 < 78; 31 < 55; 31 < 35; 31 > 22;

{11, 17, 22, 31, 35, 55, 78, 99}, {9, 5, 47}

i=7

{11, 17, 22, 31, 35, 55, 78, 99}, 9, {5, 47}

9 < 99; 9 < 78; 9 < 55; 9 < 35; 9 < 22; 9 < 17; 9 < 11;

{9, 11, 17, 22, 31, 35, 55, 78, 99}, {5, 47}

i=8

{9, 11, 17, 22, 31, 35, 55, 78, 99}, 5, {47}

5 < 99; 5 < 78; 5 < 55; 5 < 35; 5 < 22; 5 < 17; 5 < 11;

{5, 9, 11, 17, 22, 31, 35, 55, 78, 99}, {47}
i=9

{5, 9, 11, 17, 22, 31, 35, 55, 78, 99}, 47

47 < 99; 47 < 78; 47 < 55; 47 > 35;

{5, 9, 11, 17, 22, 31, 35, 47; 55, 78, 99}

Sortari divide et impera


55, 22, 78, 99, 35, 11, 17, 31, 9, 5, 47

OBS: E nevoie de spatiu de memorie suplimentar (O(n))

MERGE SORT

Complexitate: nlog(n)

- DIVIDE: se imparte recursiv lista initiala in doua subliste, aceste la randul lor se impart pana se
obtin liste de un element

- IMPERA: se compara elementele doua cate doua (tinand cont de ramura de unde au provenit)

- se construiesc subliste astfel: se compara primul elemnt din prima sublista cu primul elemnt din
sublista a doua.

Daca primul e mai mic, acesta se pune in lista rezultat si se trece la urmatorul element din sublista sa
care se compara cu elemntul curent din lista a doua.

Daca nu, se pune elementul din lista a doua si se avanseaza la urmatorul element din lista sa.
Sublistele sunt ordonate.

Cand s-au terminat elentele dintr-o sublista, elementele din cealalta sublista se copiaza in ordine in
lista finala.

DIVIDE

{55, 22, 78, 99, 35} {11, 17, 31, 9, 5, 47}


{55, 22} {78, 99, 35} {11, 17, 31} {9, 5, 47}

{55} {22} {78} {99, 35} {11} {17, 31} {9} {5, 47}

{99} {35} {17} {31} {5} {47}

IMPERA {COMPARE AND MERGE}

? 99 < 35 NU ? 17 < 31 DA 5 < 47 DA

{55} {22} {78} {35, 99} {11} {17, 31} {9} {5, 47}

? 55 < 22 NU ?78 < 35 NU ?11 < 17 DA ?9 < 5 NU

?78 < 99 DA ? 9 < 47


DA

{22, 55} {35, 78, 99} {11, 17, 31} {5, 9, 47}

? 22 < 35 DA {22} ? 11 < 5 NU {5}

? 55 < 35 NU {22, 35} ? 11 < 9 NU {5, 9}

?55 < 78 DA {22, 35, 55} ? 11 < 47 DA {5, 9, 11}

? 17 < 47 DA {5, 9, 11, 17}

? 31 < 47 DA {5, 9, 11, 17, 31}

{22, 35, 55, 78, 99} {5, 9, 11, 17, 31, 47}

? 22 < 5 NU; 22 < 9 NU; 22 < 17 NU; 22 < 31 DA {5, 9, 11, 17, 22}

? 31 < 35 DA; {5, 9, 11, 17, 22,


31}

? 35 < 47 DA {5, 9, 11, 17, 22,


31, 35}
? 47 < 55 DA {5, 9, 11, 17, 22,
31, 35, 47}

{5, 9, 11, 17, 22, 31, 35, 47, 55, 78, 99}

QUICK SORT

Complexitate: nlog(n)

- se alege un pivot dupa un algoritm preferat. ex primul elemnt, ultimul element, elementul din
mijloc, etc

- se imaprte lista in doua subliste astfel: elementele mai mici decat pivotul se pun in stanga iar cele
mai mari in dreapta pivotului, in ordinea in care au fost

- se repeta procesul pana ajungem ca fiecare elemnt sa ajunga pivot

55, 22, 78, 99, 35, 11, 17, 31, 9, 5, 47

pivot: 47

{22, 35, 11, 17, 31, 9, 5} 47 {55, 78, 99}

pivot: 5 pivot: 99

5 {22, 35, 11, 17, 31, 9} 47 {55, 78} 99

pivot: 9 pivot :78

5 9 {22, 35, 11, 17, 31} 47 {55} 78 99

pivot: 31 pivot: 55
5 9 {22, 11, 17} 31 {35} 47 55 78 99

pivot: 17 pivot: 35

5 9 {11} 17 {22} 31 35 47 55 78 99

5 9 11 17 22 31 35 47 55 78 99

Radix sort

123, 321, 44, 33, 778, 900, 5667,55, 3, 22

0123

0321

0044

0033

0778

0900

5667

0055

0003
0022

//sortare dupa cifra unitatilor

0900

0321

0022

0123

0033

0003

0044

0055

5667

0778

//sortare dupa cifra zecilor

0900

0003

0321

0022

0123

0033

0044
0055

5667

0778

///...........

0003

0022

0033

0044

0055

0123

0321

5667

0778

0900

//

0003

0022

0033

0044

0055
0123

0321

0778

0900

5667

Bucket sort

0.02, 0.123, 0.012, 0.568, 0.05

// buchete dupa prima cifra de dupa virgula

0: 0.02, 0.012, 0.05 => 0.012, 0.02, 0.05

1: 0.123 => 0.123

2: //

3://

4: //

5: 0.568 => 0.568

=> 0.012, 0.02, 0.05, 0.1233, 0.568

S-ar putea să vă placă și