Documente Academic
Documente Profesional
Documente Cultură
Algoritmi de sortare
Una din cele mai importante metode de sortare este sortarea prin inserare.
Aceasta nu necesita memorie auxiliara si este de asemenea o metoda simpla. Ideea
principala este urmatoarea: se considera pe rand fiecare element al listei ce trebuie
sortata si se introduce in pozitia necesara astfel incat atunci cand este examinat
elementul i toate elementele de pe pozitiile 1, 2, ..., i-1 sunt deja sortate. Deci daca se
presupune ca K1 K2 ... Ki – 1 si vrem sa introducem Ki astfel incat secventa
primelor i elemente sa fie ordonate crescator, atunci cautam pozitia j astfel incat Kj
Ki Kj+1, incepand de la sfarsitul secventei. Cand pozitia j a fost gasita, intreaga
secventa Kj+1, ..., Ki-1 se deplaseaza o pozitie spre dreapta, iar elementul Ki se
insereaza in pozitia j+1.
Algoritm de sortare prin inserare: Se dau K1, K2, ..., KN.
for i = 2, N
elem = Ki
j = i-1
while j >= 1 and Kj > Ki
j = j –1
endwhile
pozitie = j +1
for j= i, pozitie+1, -1
Kj = Kj-1
endfor
Kpozitie = elem
endfor
Analiza algoritmului: Intai sa observam ca operatia principala care se
efectueaza este comparatia dintre elementele listei, aceasta aparand numai in ciclul
while. Sa estimam intai timpul minim de executie. In cel mai bun caz, lista este
ordonata crescator, si deci pentru fiecare i=2, ..., N nu se face decat o comparatie Ki-1 >
N
K i. Deci numarul de comparatii= 1 N 1 si deci timpul minim N. In cel mai
i 2
rau caz, ciclul while va repeta numarul maxim de comparatii care este (i-1) pentru
fiecare i=2, ..., N, caz ce corespunde unei liste de intrare ordonata strict descrescator.
N
1
Deci numarul de comparatii= i 1 N ( N 1) si deci timpul maxim N2. Se
i 2 2
poate demonstra ca timpul mediu N si deci algoritmul este O(N2). Deci nici acesta
2
nu este un algoritm rapid si, in plus, necesita si deplasari de blocuri de elemente cate o
pozitie spre dreapta.