Sunteți pe pagina 1din 1

Modulul IV.

Algoritmi de sortare

Capitolul 11. Sortare prin inserare

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.

Scrieti un program care implementeaza algoritmul de mai sus.


Lab 12
1