Sunteți pe pagina 1din 11

Proiect MPI - Analiza sortari

Vlad - Alexandru Alexiuc


Departamenul de Informatică
Facultatea de Matematică s, i Informatică
Universitatea de Vest Timis, oara, România
Email: vlad.alexiuc03@e-uvt.ro

Rezumat
Proiectul acesta este despre analiza unor metode de
sortare s, i compararea timpurilor de execut, ie pentru
diferite seturi de date, toate acestea fiind implementate in
Python.

1
Cuprins
Contents
1 Introducere 3

2 Metode de sortari 4
2.1 BubbleSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 InsertionSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 SelectionSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4 QuickSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.5 MergeSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

3 Concluzii 10
3.1 BubbleSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 InsertionSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.3 SelectionSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.4 QuickSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.5 MergeSort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10

4 Bibliografie 11

2
1 Introducere
a) Cum au fost analizate

Fiecărui sortare i-au fost analizate timpi de execut, ie pentru


diferite seturi de valori intre 1-100 , seturi de valori variind de la 10
la 1.000.000.000 de elemente.
Pentru aceasta am folosit librăria Time si Random din Python
cu ajutorul cărora am putut afla durata programului, dar si am
putut genera numere random ı̂ntr-o lista.
Încă o librărie pe care am inclusa este Sys pentru a seta
recursion limit-ul mai mare, deoarece QuickSort si HeapSort sunt
algoritmi recursivi, as, a am putut testa date mai mari.

b) Implementare in Python
Inceput:

Final:

3
2 Metode de sortari
2.1 BubbleSort
1.Cum funct, ionează BubbleSort?
Prin această metodă se parcurge vectorul s, i se compară fiecare element cu
succesorul său. Dacă nu sunt ı̂n ordine cele două elemente se interschimbă
ı̂ntre ele.
Vectorul se parcurge de mai multe ori, până când la o parcurgere completă
nu se mai execută nicio interschimbare ı̂ntre elemente.

2.Implementare in Python

3.Performanta

Numar elemente Durata(secunde)


100 0.00051
1000 0.053
10.000 6.12
20.000 25.62
50.000 150.31

4.Complexitate

Metoda bulelor are o complexitate de O(n**2), iar timpul mediu este tot
O(n**2).

4
2.2 InsertionSort
1.Cum funct, ionează InsertionSort?
În tehnica de sortare prin insert, ie, pornim de la al doilea element s, i ı̂l
comparăm cu primul element s, i ı̂l punem ı̂ntr-un loc adecvat.
Apoi efectuăm acest proces pentru elementele ulterioare. Comparăm fiecare
element cu toate elementele sale anterioare s, i punem sau inserăm elementul ı̂n
pozit, ia corectă.

2.Implementare in Python

3.Performanta

Numar elemente Durata(secunde)


100 0.00029
1000 0.026
10.000 2.71
20.000 10.88
50.000 69.81

4.Complexitate

InsertionSort are o complexitate de O(n**2), iar timpul mediu este depinde


de cat de bine e lista sortata deja , in cel mai bun caz are o complexitate de
O(n**2), iar in cel mai rău caz are o complexitate de O(n**2).
Timpul de execut, ie ı̂n cel mai bun caz (best-case) pentru algoritmul
Insertion Sort este O(n), unde ”n” este numărul de elemente din lista de sortat.

5
2.3 SelectionSort
1.Cum funct, ionează SelectionSort?
Sortarea prin select, ia minimului (sau maximului) este metoda de ordonare
prin selectarea unui element s, i plasarea lui pe pozit, ia sa finală direct ı̂n tabloul
A. De exemplu, ı̂n caz de ordonare crescătoare, pornind de la primul element
se caută valoarea minimă din tablou.
Această se aşează pe prima pozit, ie printr-o interschimbare ı̂ntre elementul
de pe prima pozit, ie s, i elementul minim de pe pozit, ia k.

2.Implementare in Python

3.Performanta

Numar elemente Durata(secunde)


100 0.00044
1000 0.026
10.000 2.40
20.000 9.82
50.000 61.40

4.Complexitate

Complexitatea timp a algoritmului SelectionSort este O(n**2),dar Timpul


mediu de execut, ie pentru algoritmul SelectionSort este, de asemenea, O(n**2),
dar dacă lista de intrare este deja sortată sau este sortată ı̂n ordine inversă.

6
2.4 QuickSort
1.Cum funct, ionează QuickSort?
Sortarea rapidă se realizează ı̂ntr-o funct, ie care, aplicată unui s, ir de numere,
pozit, ionează un element din s, ir, pivot, pe pozit, ia finală, pe care se va afla
acesta ı̂n s, irul sortat, s, i deplasează elementele din s, ir mai mici decât acesta ı̂n
fata sa, iar pe cele mai mari după el.
Procedeul se reia pentru fiecare din cele două subs, iruri care au rămas
neordonate

2.Implementare in Python

3.Performanta

Numar elemente Durata(secunde)


100 0.00015
1000 0.0019
10.000 0.12
50.000 1.26
100.000 4.66
4.Complexitate

Complexitatea timpului la QuickSort fără partit, ionare este O(n log n) in


medie, unde n este dimensiunea listei de sortat.
Acesta este unul dintre cele mai rapide algoritmi de sortare pentru date
aleatoare.

7
2.5 MergeSort
1.Cum funct, ionează MergeSort?
Definim interclasarea a două liste sortate ca fiind operat, ia prin care obt, inem
o listă sortată ce cont, ine toate elementele listelor de intrare.
Sortarea prin interclasare utilizează metoda Divide et Impera:
-se ı̂mparte vectorul ı̂n secvent, e din ce ı̂n ce mai mici, astfel ı̂ncât fiecare
secvent, ă să fie us, or ordonată la un moment dat, apoi interclasată cu o altă
secvent, ă din vector, de asemenea ordonată.

2.Implementare in Python

8
3.Performanta

Numar elemente Durata(secunde)


100 0.0002
1000 0.003
10.000 0.041
50.000 0.22
100.000 0.50

4.Complexitate

Complexitatea algoritmului Merge Sort este O(n log n).Timpul mediu de


execut, ie depinde de dimensiunea s, i de tipul datelor de intrare.
În general, Merge Sort are un timp mediu de execut, ie mai bun decât Quick
Sort s, i are un comportament mai predictibil pe toate tipurile de date, deoarece
nu depinde de pivotul ales.
Timpul mediu este O(n log n).
În general, Merge Sort este un algoritm foarte eficient s, i utilizat frecvent ı̂n
practică pentru a sorta date de dimensiuni mari.

9
3 Concluzii
3.1 BubbleSort
Bubble Sort este un algoritm de sortare lent s, i ineficient,
deoarece necesită mai multe treceri prin lista pentru a sorta
elementele .De aceea BubbleSort – ul este folosit doar in scopuri
educat, ionale.

3.2 InsertionSort
Insertion Sort este un algoritm de sortare eficient pentru liste
mici sau listele aproape sortate. In plus , putem vedea timpi mult
mai buni pentru vectori mai mari de sortat fata de BubbleSort.
Cu toate acestea, Insertion Sort nu este eficient pentru liste mari
sau foarte dezordonate s, i este depăs, it ı̂n performant, ă de alt, i
algoritmi de sortare.

3.3 SelectionSort
Putem vedea scadere in timpi fata de ceilalti algoritmi, el poate
fi foarte eficient pentru date de intrare mici sau pentru cazurile ı̂n
care lista este aproape sortată. În aceste situat, ii, SelectionSort
poate fi chiar mai rapid decât algoritmi mai sofisticat, i precum
Merge Sort sau Quick Sort.

3.4 QuickSort
Pentru liste mari sau pentru liste cu date distribuite neuniform,
timpul mediu poate creste considerabil, dar QuickSort este in
continuare un algoritm eficient in majoritatea situat, iilor.
Rezultatele obt, inute sunt mult mai bune decât celelalte , acesta
metoda fiind mult mai performanta decât restul . Putem observa
ı̂mbunătăt, iri secvent, iale la timpi.

3.5 MergeSort
Am rămas plăcut surprins când am văzut ce rezultate a dat
MergeSort, teoretic este printre cele mai rapide metode de sortare.
Rezultatele nu se compara nici măcar cu QuickSort , este mult
peste.

10
4 Bibliografie
Link - Geeks4Geeks
Link - Github
Link - StackOverflow
Link - UVT

11

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