Sunteți pe pagina 1din 4

4) Diferenta Straight selection si Straight

insertion
Straight selection
Sortarea selecției se referă la o clasă de algoritmi pentru sortarea unei liste de elemente folosind
comparații. Acești algoritmi selectează din listă articole mai mici sau mai mari și le adaugă la
secvența de ieșire. Selectarea dreaptă este un membru O (n  2 ) al clasei în care scanăm în mod
repetat elementele rămase nesortate din listă în timp liniar, găsim cel mai mare (sau cel mai mic) și îl
adăugăm la rezultat. Deoarece privește toate datele neprocesate de pe fiecare trecere, nu are rezultate
mai bune pentru intrările aproape sortate decât pentru intrările aleatorii sau sortate invers, spre
deosebire de sortarea inserției.

Versiunea din această demonstrație face N-1 trece, găsind indicele celui mai mare element nesortat
de fiecare dată, și apoi schimbând cel mai mare articol nesortat cu ultimul element nesortat - mutând
astfel cel mai mare element rămas în poziție pe fiecare trecere. La fiecare trecere, elementele căutate
pentru maxim sunt afișate în verde, cu elementul maxim indicat de un "V" de mai sus. Elementele
încă neexaminate și nesortate sunt arătate în roz.

Rapid Încet
Alegeți
Introducere
Sortare Dimensiunea de intrare: 
intrare
Initial array:301013789421215116Array:30101378942121

Straight insertion
Acesta este un algoritm de sortare bazat pe comparație. Aici, este menținută o sub-listă
care este întotdeauna sortată. De exemplu, partea inferioară a unui tablou este menținută
pentru a fi sortată. Un element care urmează să fie „inserat” în această sub-listă sortată
trebuie să își găsească locul potrivit și apoi trebuie să fie introdus acolo. De aici
numele, sortarea inserției .
Matricea este căutată secvențial și articolele nesortate sunt mutate și introduse în sub-
lista sortată (în același tablou). Acest algoritm nu este potrivit pentru seturi de date mari,
deoarece complexitatea sa medie și cea mai proastă situație sunt de Ο (n 2 ), unde n este
numărul de elemente.

Cum funcționează sortarea de inserție?


Luăm un exemplu nesortat pentru exemplul nostru.
Sortul de inserție compară primele două elemente.

Constată că ambele 14 și 33 sunt deja în ordine crescătoare. Deocamdată, 14 sunt într-o


sub-listă sortată.

Sortarea de inserție merge înainte și compară 33 cu 27.

Și constată că 33 nu este în poziția corectă.

Acesta schimbă 33 cu 27. Verifică, de asemenea, toate elementele sub-listei sortate. Aici


vedem că sub-lista sortată are un singur element 14 și 27 este mai mare decât 14. Prin
urmare, sub-lista sortată rămâne sortată după schimbare.

Acum avem 14 și 27 în sub-lista clasată. În continuare, se compară 33 cu 10.

Aceste valori nu sunt într-o ordine ordonată.

Așa că le schimbăm.
Cu toate acestea, schimbarea face 27 și 10 nesortate.

Prin urmare, le schimbăm și noi.

Din nou găsim 14 și 10 într-o ordine nesortată.

Le schimbăm din nou. Până la sfârșitul celei de-a treia iterații, avem o sub-listă sortată de
4 articole.

Acest proces continuă până când toate valorile nesortate sunt acoperite într-o sub-listă
sortată. Acum vom vedea câteva aspecte de programare ale sortării inserției.
Algoritmul
Acum avem o imagine mai mare a modului în care funcționează această tehnică de
sortare, astfel încât putem deriva pași simpli prin care putem realiza sortarea de inserție.
Step 1 − If it is the first element, it is already sorted. return 1;
Step 2 − Pick next element
Step 3 − Compare with all elements in the sorted sub-list
Step 4 − Shift all the elements in the sorted sub-list that is greater
than the
value to be sorted
Step 5 − Insert the value
Step 6 − Repeat until list is sorted
Pseudo cod
procedure insertionSort( A : array of items )
int holePosition
int valueToInsert

for i = 1 to length(A) inclusive do:

/* select value to be inserted */


valueToInsert = A[i]
holePosition = i

/*locate hole position for the element to be inserted */


while holePosition > 0 and A[holePosition-1] > valueToInsert do:
A[holePosition] = A[holePosition-1]
holePosition = holePosition -1
end while

/* insert the number at hole position */


A[holePosition] = valueToInsert

end for

end procedure

Pentru a afla despre implementarea sortării inserției în limbajul de programare C

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