Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Documente similare
Curs 8: Tehnica divizării (I) Algoritmi si structuri de date - Curs 8 1

carte2008.dvi

Algoritmi elementari Metode de căutare secvenţială binară Metode de ordonare metoda bulelor metoda inserţiei metoda selecţiei metoda numărării Intercl

ALGORITMICĂ. Seminar 3: Analiza eficienţei algoritmilor - estimarea timpului de execuţie şi notaţii asimptotice. Problema 1 (L) Să se determine număru

ALGORITHMICS

Tablouri unidimensionale Problema 1 Să se determine mulţimea cifrelor unui număr natural n > 0, dat. Exemplu: n= Cifre = {1,2,3,7} Se cere să s

Diapositive 1

Slide 1

Curs 3 Permutari cu repetitie. Combinari. Algoritmi de ordonare si generare

Lucrarea nr. 4 - Algoritmi de sortare şi ordonare Breviar teoretic Un algoritm de sortare este o metoda prin care se aranjează elementele unui tablou

SUBPROGRAME

Ecuatii si sisteme de ecuatii neliniare 1 Metoda lui Newton Algorithm 1 Metoda lui Newton pentru ecuaţia f(x) = 0. Date de intrare: - Funcţia f - Apro

Lecții de pregă,re la informa,că Admitere 2019 Tema: Discutarea problemelor date la ul,mele sesiuni de admitere Bogdan Alexe

1 Lucrarea nr. 8 - Structuri de date de tip liste sortate O listă sortată reprezintă un aranjament al înregistrărilor din cadrul listei în funcţie de

ALGORITMII ŞI REPREZENTAREA LOR Noţiunea de algoritm Noţiunea de algoritm este foarte veche. Ea a fost introdusă în secolele VIII-IX de către Abu Ja f

1. Găsiți k numerele cele mai apropiate într-un şir nesortat Dându-se un şir nesortat și două numere x și k, găsiți k cele mai apropiate valori de x.

Teoria Grafurilor şi Combinatorică recapitulare Principii de numărare Reţineţi că: P (n, r) este numărul de şiruri (sau r-permutări) de forma A 1,...,

Microsoft PowerPoint - Curs_SDA_9_RO_2019_v2.pptx

Microsoft PowerPoint - Curs_SDA_10_RO_2019_v1.pptx

E_d_Informatica_sp_SN_2014_bar_10_LRO

Laborator 2: Instrucţiuni Java şi lucru cu şiruri de caractere Întocmit de: Adina Neculai Îndrumător: Asist. Drd. Gabriel Danciu 18 octombrie 2011

Slide 1

Calcul Numeric

Modelarea si Simularea Sistemelor de Calcul

Subiectul 1

Capitole Speciale de Informatică Curs 2: Determinarea vocabularului de termeni şi a listelor de postări 4 octombrie 2018 Reamintim că listele de indec

Backtracking_2018

Operatorii in C Expresii Operatori aritmetici Operatori de asignare Operatori de incrementare si decrementare Operatori relationali Operatori logici O

Metode de programare Proiectarea algoritmilor

Şiruri de numere reale Facultatea de Hidrotehnică Universitatea Tehnică Gheorghe Asachi Iaşi, 2015 Analiză Matematică Lucian Maticiuc 1 / 29

Lucrarea 7 Filtrarea imaginilor BREVIAR TEORETIC Filtrarea imaginilor se înscrie în clasa operaţiilor de îmbunătăţire, principalul scop al acesteia fi

E_d_Informatica_sp_MI_2015_bar_02_LRO

Divide et Impera

Laborator Implementarea algoritmului DES - Data Encryption Standard. Exemplu DES Algoritmul DES foloseşte numere b

Logică și structuri discrete Limbaje regulate și automate Marius Minea marius/curs/lsd/ 24 noiembrie 2014

PHP (II)

Examen de licenţă Informatică Exemple de întrebări - Structuri discrete şi algoritmi In atenţia studenţilor: Proba scrisă a examenului de licen

METODE NUMERICE ÎN INGINERIE

Declararea variabilelor

Cursul 13 Mulţimi Julia Fie f : C C o funcţie complexă şi fie f n = f f f iterata de ordin n a lui f. Peste tot în continuare vom presupune că f este

Examen de licenţă Informatică Exemple de întrebări - Structuri discrete şi algoritmi In atenţia studenţilor: Proba scrisă a examenului de licen

tehnologii web

Tablouri (continuare)

Microsoft Word - CarteC.doc

Microsoft Word - Raspunsul la niste provocari. Partea III..doc

SSC-Impartire

Microsoft Word - 2 Filtre neliniare.doc

PAS cap. 2: Reprezentări rare p. 1/35 Prelucrarea avansată a semnalelor Capitolul 2: Reprezentări rare Bogdan Dumitrescu Facultatea de Automatică şi C

Microsoft Word - unitati de invatare 11liceu-12 sam

Slide 1

Probleme rezolvate informatica: Probleme rezolvate grafuri si a

Microsoft Word - Lucrarea_10_t.doc

Logică și structuri discrete Logică propozițională Marius Minea marius/curs/lsd/ 3 noiembrie 2014

Microsoft Word - Software pentru ordonarea multirang a componentelor unei colectivitati.doc

O NOUA PROBLEMA DE CONCURS OLIMPIADA MUNICIPALA DE INFORMATICA, IASI 2019 V-am promis într-un articol mai vechi ca vom prezenta pe acest blog câteva p

L7

Anexa nr. 2 FIŞA DISCIPLINEI 1. Date despre program 1.1 Instituţia de învăţământ superior UNIVERSITATEA DE VEST TIMISOARA 1.2 Facultatea FIZICA 1.3 De

Facultatea de Automatică și Calculatoare

Noțiuni de bază ale criptografiei

Logică și structuri discrete Relații. Funcții parțiale Marius Minea marius/curs/lsd/ 20 octombrie 2014

Microsoft Word - Algoritmi genetici.docx

Proiectarea Algoritmilor

Probleme proiect TP BITPERM Implementați un algoritm care citește de la intrarea standard două numere naturale și scrie la ieșirea standard da

Microsoft Word - D_ MT1_II_001.doc

Slide 1

PROGRAMA CONCURSULUI NAŢIONAL

Nr. 932 din Avizat ISJ Vâlcea, Inspector școlar informatică, Ciochină Luisa EXAMEN DE ATESTARE A COMPETENȚELOR PROFESIONALE A ABSOLVENȚILOR

Slide 1

Poo Laboratoare 1 Contents Laborator7 2 1 Colecţii de obiecte în Java Interfaţa Iterator Interfaţa C

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XII 1.Să se scrie în limbajul C/C++ definiţia comp

Capitole Speciale de Informatică Curs 4: Calculul scorurilor în un sistem complet de extragere a informaţiilor 18 octombrie 2018 Reamintim că în cursu

Microsoft Word - Curs_08.doc

Lecţia 2 Structura liniară, alternativă şi repetitivă Clasa a V-a Structuri de bază(liniară, alternativă şi repetitivă) Programarea structurată este o

Propunator: Morar Florin Colegiul National Silvania Zalau Discipina: Informatica Nivel liceal, cls. XI 1.Fişierul text bac.in conţine cel mult 1000 de

Microsoft PowerPoint - ImplementareLimbaj [Read-Only] [Compatibility Mode]

PROGRAMARE ORIENTATA PE OBIECTE

LUCRAREA 8 PROGRAMAREA NELINIARĂ ÎN REZOLVAREA PROBLEMELOR DIN ENERGETICĂ. METODE DE ORDINUL Aspecte generale Programarea neliniară are o foart

MergedFile

Analiză statică Analiza fluxului de date 23 octombrie 2014

Programarea şi utilizarea calculatoarelor

Microsoft Word - Curs 7 - JavaScript.doc

Laboratorul 2 Problema tăieturii minime Considerăm un graf (neorientat) G = (V, E) (V e mulţimea vârfurilor, E e mulţimea muchiilor) care este conex (

Microsoft Word - TIC5

PowerPoint Presentation

Capitole Speciale de Informatică Curs 1: Extragerea informaţiilor. Modelul boolean şi modelul boolean extins 27 septembrie 2018 Extragerea informaţiil

Probleme rezolvate 1) Să se calculeze limitele următoarelor şiruri: 1 a) x n n = ( n+ 1)( n+ 2 )...( n+ n), n 2 n ( 1) 1 n n b) 2 3 n 5 n... ( 2

Microsoft Word - BD4_Curs11.doc

Analiză de flux de date 29 octombrie 2012

Slide 1

Limbaje de programare Pointeri. Alocare dinamică (continuare) 26 noiembrie 2012

proiectarea bazelor de date

Programarea calculatoarelor. Note de curs Marius Minea 1 Introducere în programarea în C 1.1 Funcţii în limbajul C Calcule şi funcţii La origine, rolu

Microsoft Word - Lab1a.doc

Tiberiu Trif Analiză matematică 2 Calcul diferențial și integral în R n

UNIVERSITATEA DIN BUCURESTI FACULTATEA DE MATEMATICA SI INFORMATICA DEPARTAMENTUL DE INFORMATICA Tematica și bibliografia lecției deschise pentru ocup

Limbaje de Programare Curs 6 – Functii de intrare-iesire

Managementul Resurselor Umane

Logică și structuri discrete Mulțimi Casandra Holotescu

CURBE BÉZIER În CAGD se utilizează adesea curbele polinomiale, adică acele curbe definite de o parametrizare polinomială: C : [a, b] R 3 C(t) = (x(t),

Secţiunea 9-10 avansaţi Concurs online de informatică Categoria PROGRAMARE PROBLEMA 1 TEXT 100 puncte Un text este format din una sau mai multe propoz

Transcriere:

Metode de sortare - pregătire admitere - Conf.dr. Alexandru Popa Lect. dr. Andrei Pătraşcu Universitatea din Bucureşti 1

Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort) Algoritmul de sortare prin inserţie (Insertion sort) Algoritmul de sortare prin selecţie (Selection sort) Algoritmul de sortare prin interclasare (Mergesort) Algoritmul de sortare rapidă (Quicksort) 2

Problema sortării Fie un şir de entităţi : e.g. numere, caractere, înregistrări ale unei baze de date, etc. Fiecare entitate deţine o caracteristică numită cheie de sortare. http://www.whydomath.org/reading_room_material/ian_stewart/shuffle/shuffle.html Există o relaţie de ordine ce se defineşte peste mulţimea valorilor posibile ale cheii de sortare. Sortarea şirului = dispunerea elementelor şirului astfel încât valorile cheilor de sortare să se afle în ordine crescătoare (sau descrescătoare) 3

Problema sortării - Exemple Elemente numerice: [1,5,2,3,6,10,22,4,44]. În acest caz cheia de sortare este reprezentată de însuşi elementul şirului. Elemente definite de înregistrări cu mai multe câmpuri (nume şi vârstă): (Andrei, 29), (Paul, 29), (Tiberiu, 10), (Corina, 25), (Claudiu, 19). Două posibile chei de sortare pentru fiecare element: Nume Vârstă Sortare după nume: (Andrei, 29), (Claudiu, 19), (Corina, 25), (Paul, 29), (Tiberiu, 10). Sortare după vârstă: (Tiberiu, 10), (Claudiu, 19), (Corina, 25), (Andrei, 29), (Paul, 29). 4

Problema sortării Fie şirul: x[1], x[2], x[n]. Dacă notăm cheia elementuluix i cu K i, atunci sortarea şirului presupune determinarea unei permutări p(1), p(2),, p(n) astfel încât: K p(1) K p(2) K p(n). Pentru simplitate, considerăm că cheia de sortare Ki este reprezentată de întregul element x i. 5

Proprietăţi ale metodelor de sortare 1. Eficienţa. Orice metodă de sortare este caracterizată de volumul de resurse (timp de execuţie) necesitat pentru rezolvarea problemei. Număr de comparaţii (de chei) Număr de deplasări (de date) 2. Stabilitate. O metodă de sortare este stabilă dacă ordinea relativă a elementelor cu aceeaşi cheie de sortare rămâne neschimbată. Aranjament iniţial: Sortare stabilă: (Andrei, 29), (Paul, 29), (Tiberiu, 10), (Corina, 25), (Claudiu, 19). (Tiberiu, 10), (Claudiu, 19), (Corina, 25), (Andrei, 29), (Paul, 29). Sortare instabilă: (Tiberiu, 10), (Claudiu, 19), (Corina, 25), (Paul, 29), (Andrei, 29). 3. Simplitate. O metodă de sortare este caracterizată de nivelul de complexitate al implementării sale în practică. 6

Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort) Algoritmul de sortare prin inserţie (Insertion sort) Algoritmul de sortare prin selecţie (Selection sort) Algoritmul de sortare prin interclasare (Mergesort) Algoritmul de sortare rapidă (Quicksort) 7

Sortare prin interschimbare (Bubble sort) Idei generale: Considerăm şirul: x[1],x[2],,x[n]. Se parcurge secvenţial şirul (element cu element). Se compară elementul curent cu următorul şi, în cazul în care se află în ordinea nepotrivită, se interschimbă. Se efectuează parcurgeri până şirul nu mai necesită interschimbări 8

Sortare prin interschimbare - Exemplu 9

Sortare prin interschimbare Algoritm Sort-Interschimbare(arrayx): 1. repeat 1. for i = 2 n 1. if (x[i] < x[i 1]) // dacă x[i] şi x[i 1] nu sunt ordonate 1. x[i 1] x[i] // se interschimbă x[i] cu x[i 1] 2. swap =true endif endfor until not swap 1. return x // repetă până nu mai sunt necesare interschimbări 10

Sortare prin interschimbare - Eficienţă Algoritm Sort-Interschimbare(arrayx): 1. repeat 1. for i = 2 n 1. if (x[i] < x[i 1]) 1. x[i 1] x[i] 2. swap =true endif endfor until not swap 2. return x Operaţii: Comparaţii T C (n) Deplasări elemente T D (n) Pentru fiecare i: 1 comparaţii Pentru toate valorile i: n 1 = n 1 i=2 Pentru toate parcurgerile: n 1 T C (n) n(n 1) 2 11

Sortare prin interschimbare - Eficienţă Algoritm Sort-Interschimbare(arrayx): 1. repeat 1. for i = 2 n 1. if (x[i] < x[i 1]) 1. x[i 1] x[i] 2. swap =true endif endfor until not swap 2. return x Operaţii: Comparaţii T C (n) Deplasări elemente T D (n) Pentru fiecare i: Maxim 2 Pentru toate valorile i: 0 T i 2(n i) Pentru toate parcurgerile: 0 T D (n) n(n 1) 12

Sortare prin interschimbare - Eficienţă Comparaţii: Deplasări elemente: n 1 T C (n) n(n+1) 2 0 T D (n) n(n 1) Complexitate totală: n 1 T(n) = T C (n)+t D (n) n(n+1) 2 +n(n 1) O(n 2 ) Cel mai favorabil caz: 1,2,3,,n; Cel mai nefavorabil: n,n 1,,1 Algoritmul de sortare prin interschimbare este stabil! Simplu de implementat, dar ineficient pentru şiruri de dimensiuni mari! 13

Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort) Algoritmul de sortare prin inserţie (Insertion sort) Algoritmul de sortare prin selecţie (Selection sort) Algoritmul de sortare prin interclasare (Mergesort) Algoritmul de sortare rapidă (Quicksort) 14

Sortare prin inserţie (Insertion sort) Idei generale: Considerăm şirul: x[1],x[2],,x[n]. Se parcurge secvenţial şirul (element cu element). Se inserează elementul curent (x[i]) în subşirul care îl precede (x[1],x[2],,x[i 1]) astfel încât acesta să rămână ordonat: x[1],x[2],,x[i 1],x[i],x[i+1],,x[n] Subşirul ce conţine elementele deja sortate creşte la fiecare iteraţie, astfel încât, după ce parcurgem toate elementele, secvenţa este sortată în întregime 15

Sortare prin inserţie - Exemplu http://freefeast.info/general-it-articles/insertion-sort-pseudo-code-of-insertion-sort-insertion-sort-in-data-structure/ 16

Sortare prin inserţie Algoritm Sort-Inserţie(array x): 1. for i = 2 n 1. aux x[i] // fixarea elementului i 2. j i 1 3. while (j >= 1) and (aux < x[j]) // căutarea poziţiei 1. x[j +1] x[j] // deplasare element x[j] pe poziţia j +1 2. j j 1 endwhile 4. x[j + 1] aux // deplasare element x[i] pe poziţia căutată endfor 2. return x 17

Sortare prin inserţie - Eficienţă Sort-Inserţie(arrayx) 1. for i = 2 n 1. aux x[i] 2. j i 1 3. while (j >= 1) and (aux<x[j]) 1. x[j +1] x[j] 2. j j 1 endwhile 4. x[j +1] aux endfor 2. return x Operaţii: Comparaţii T C (n) Deplasări elemente T D (n) Pentru fiecare i: 1 T i (n) i Pentru toate valorile i: n 1 T C (n) n(n+1) 2 1 18

Sortare prin inserţie - Eficienţă Sort-Inserţie(arrayx) 1. for i = 2 n 1. aux x[i] 2. j i 1 3. while (j >= 1) and (aux<x[j]) 1. x[j +1] x[j] 2. j j 1 endwhile 4. x[j +1] aux endfor 2. return x Operaţii: Comparaţii T C (n) Deplasări elemente T D (n) Pentru fiecare i: 0+2 T i (n) (i 1)+2 = i+1 Pentru toate valorile i: 2(n 1) T D (n) (n+1)(n+2) 2 3 19

Sortare prin inserţie - Eficienţă Comparaţii: n 1 T C (n) n(n+1) 2 1 Deplasări elemente: 2(n 1) T D (n) (n+1)(n+2) 2 3 Complexitate totală: 3(n 1) T(n) = T C (n)+t D (n) n 2 +2n 3 O(n 2 ) Cel mai favorabil caz: 1,2,3,,n; Cel mai nefavorabil: n,n 1,,1 Algoritmul de sortare prin inserţie este stabil! Este foarte simplu de implementat (există implementări in 5 linii de cod)! Recomandat pentru şiruri restrânse de elemente (performanţe practice bune!) 20

Sortare prin inserţie binară Idei generale: Considerăm şirul: x[1],x[2],,x[n]. Se parcurge secvenţial şirul (element cu element). Se inserează elementul curent (x[i]) în subşirul care îl precede (x[1],x[2],,x[i 1]), folosind algoritmul de căutare binară, astfel încât acesta să rămână ordonat: x[1],x[2],,x[i 1],x[i],x[i+1],,x[n] Îmbunătăţire a metodei de sortare prin inserţie directă: se înlocuieşte procedura de căutare liniară (O(n)) cu cea de căutare binară (O(log(n))). 21

Sortare prin inserţie binară http://flylib.com/books/en/2.300.1.75/1/ 22

Sortare prin inserţie binară Căutare-binară(array x, int p, int q, int key): 1. mid = p + ((q-p) / 2) 2. if ( key> x[mid] ) 1. return Căutare-binară(x, mid+1, q, key) else 1. return Căutare-binară(x, p, mid, key) endif 3. return mid Complexitate: T(n) = O(log(n)) Sortarea prin inserţie binară reduce numărul de comparaţii de la O(n 2 ) la O(nlog(n)) Cu toate astea, complexitatea totală se păstrează O(n 2 ), datorită numărului de deplasări! 23

Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort) Algoritmul de sortare prin inserţie (Insertion sort) Algoritmul de sortare prin selecţie (Selection sort) Algoritmul de sortare prin interclasare (Mergesort) Algoritmul de sortare rapidă (Quicksort) 24

Sortare prin selecţie (Selection sort) Idei generale: Considerăm şirul: x[1],x[2],,x[n]. Se parcurge secvenţial şirul (element cu element). Se determină minimum-ul din subşirul (x[i],x[i+1],,x[n]), şi se înlocuieşte cu elementul curent (x[i]). [x[1],x[2],,x[i 1],x[i],x[i+1],,x[n]] Subşirul ce conţine elementele deja sortate se mareşte la fiecare iteraţie, astfel încât, după ce parcurgem toate elementele, secvenţa este sortată în întregime 25

Sortare prin selecţie - Exemplu http://freefeast.info/general-it-articles/selection-sort-pseudo-code-of-selection-sort-selection-sort-in-data-structure/ 26

Sortare prin selecţie Algoritm Sort-Selecţie(array x): 1. for i = 1 n 1 1. k i 2. for j = i+1 n // căutare minim în subşirul x[i : n] 1. if x[k] > x[j] 1. k j endfor 3. if k i // dacă elementul curent nu este minim-ul subşirului x[i : n] 1. x[k] x[i] // interschimbare minim cu elementul curent endfor 2. return x 27

Sortare prin selecţie - Eficienţă Sort-Selecţie(arrayx): 1. for i = 1 n 1 1. k i 2. for j = i+1 n 1. if x[k] > x[j] 1. k j endfor 3. if k i 1. x[k] x[i] endfor 2. return x Operaţii: Comparaţii T C (n) Deplasări elemente T D (n) Pentru fiecare i: T i (n) = n i Pentru toate valorile i: T C (n) = n(n 1) 2 28

Sortare prin selecţie - Eficienţă Sort-Selecţie(arrayx): 1. for i = 1 n 1 1. k i 2. for j = i+1 n 1. if x[k] > x[j] 1. k j endfor 3. if k i 1. x[k] x[i] endfor 2. return x Operaţii: Comparaţii T C (n) Deplasări elemente T D (n) Pentru fiecare i: 0 T i (n) 3 fiecare interschimbare necesită 3 deplasări Pentru toate valorile i: 0 T D (n) 3(n 1) 29

Algoritmul de sortare prin selecţie - Eficienţă Comparaţii: T C (n) = n(n 1) 2 Deplasări elemente: 0 T D (n) 3(n 1) Complexitate totală: n(n 1) 2 T(n) = T C (n)+t D (n) n(n 1) 2 +3(n 1) O(n 2 ) Număr redus de deplasări elemente! (faţă de Sortarea prin inserţie) Algoritmul de sortare prin selecţie nu este stabil! 30

Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort) Algoritmul de sortare prin inserţie (Insertion sort) Algoritmul de sortare prin selecţie (Selection sort) Algoritmul de sortare prin interclasare (Mergesort) Algoritmul de sortare rapidă (Quicksort) 31

Interclasare Fie şirurile: x[1],x[2],,x[n] şi y[1],y[2],,y[m] (m n) ordonate crescător; Procedura de interclasare 1. Se compară elementele minime din fiecare şir 2. Se returnează cel mai mic 3. Se repetă paşii precedenţi pană la epuizarea elementelor http://flylib.com/books/en/2.300.1.86/1/ 32

Interclasare Algoritm Interclasare(array x, array y) 1. i 1,j 1,k 1 2. while j m and i n 2. if x i y j 1. z k x i 2. k k +1 3. i i+1 else 1. z k y j 2. k k +1 3. j j +1 3. if i > n < 1. (z k,,z m+n ) (x i,,x n ) else Complexitate O(m+n) Operaţie mult mai simplă decât sortarea Reducem procesul de sortare la operaţii de interclasare: se interclasează subşiruri din ce in ce mai lungi, până se obţine şirul sortat. 1. (z k,,z m+n ) (y j,,y m ) 4. return z 33

Sortare prin interclasare (Merge sort) Structură generală: Considerăm şirul: x[1],x[2],,x[n]. Se descompune şirul iniţial nesortat în n subşiruri de lungime 1 Se interclasează subşirurile obţinute la pasul precedent până rezultă un singur şir http://interactivepython.org/courselib/static/pythonds/sortsearch/themergesort.html 34

Sortare prin interclasare - Exemplu https://en.wikipedia.org/wiki/merge_sort#/media/file:merge_sort_algorithm_diagram.svg 35

Algoritmul de sortare prin interclasare Algoritm Sort-Interclasare(array x, int p, int q): 1. if (p < r) // we have at least 2 items 1. q = (p+r)/2 2. Sort-Interclasare(x, p, q) // sortare x[p:q] 3. Sort-Interclasare(x, q+1, r) // sortare x[q+1:r] 4. Interclasare(x[p:q], x[q+1:r]) // interclasare subşirurilor endif 36

Sortare prin interclasare - Eficienţă Algoritm Interclasare(array x, array y) 1. i 1,j 1,k 1 2. while j m and i n 2. if x i y j 1. z k x i 2. k k +1 3. i i+1 else 1. z k y j 2. k k +1 3. j j +1 4. if i > n 1. (z k,,z m+n ) (x i,,x n ) else 1. (z k,,z m+n ) (y j,,y m ) Operaţiile dominante ale algoritmului Sort-Interclasare au loc in procedura de interclasare Se poate estima iterativ complexitatea T(n): Problema este descompusă iterativ in două subprobleme cu dimensiune redusă la jumătate O subproblemă de dimensiune 1 costă O(1) operaţii Procedura de interclasare costă O(n) 37

Sortare prin interclasare - Eficienţă Complexitate totală: O(n log(n)) 1, dacă n = 1 T(n) = T ( n 2 ) +T ( n 2 ) +n, altfel. Recomandat pentru şiruri de mari dimensiuni Cu toate că are o complexitate mai bună, în cazul şirurilor de dimensiune mici, metoda sortării prin inserţie prezintă performanţe mai bune decât sortarea prin interclasare Algoritmul de sortare prin interclasare este stabil! 38

Cuprins Problema sortării Algoritmul de sortare prin interschimbare (Bubble sort) Algoritmul de sortare prin inserţie (Insertion sort) Algoritmul de sortare prin selecţie (Selection sort) Algoritmul de sortare prin interclasare (Mergesort) Algoritmul de sortare rapidă (Quicksort) 39

Algoritmul de sortare rapidă (Quicksort) Algoritm de sortare eficient dezvoltat de Tony Hoare în 1959 şi publicat în 1961 Implementările bune pot depăşi de 2-3 ori performanţele sortării prin interclasare Idei generale: Considerăm şirul: x[1],x[2],,x[n]. Se alege din şir un element, numit pivot. [x[1],x[2],,x[i 1],x[i],x[i+1],,x[n]] Se realizează partiţionarea şirului (în raport cu acest pivot): se reordonează şirul astfel încât elementele cu valori mai mici decât pivotul se plasează înainte de pivot, iar elementele cu valori mai mari decât pivotul se plasează după acesta (cele egale în oricare din parţi). După partiţionare, pivotul se află in poziţia finală. Se aplică recursiv aceeaşi procedură subşirului de elemente cu valori mai mici, iar separat subşirului cu valori mai mari. 40

Algoritmul de sortare rapidă (Quicksort) 41

Algoritmul de sortare rapidă (Quicksort) Algoritm Quicksort (array x, int l, int h) 1. if (l < h) 1. LocPivot = Partitionare(x, l, h) 2. Quicksort(x,l, LocPivot) // recursie pe segmentul elementelor mai mici 3. Quicksort(x, LocPivot +1, h) // recursie segment elemente mai mari Algoritm Partitionare (array x, int l, int h) 1. pivot = x[l] // considerăm pivot primul element 2. leftwall = l 3. for i = l+1 h (a) if (x[i] < pivot) 1. x[i] x[leftwall] // elementul x[i] se mută în segmentul corect 2. leftwall = leftwall +1 4. pivot x[leftwall] 5. return leftwall 42

Algoritmul de sortare rapidă (Quicksort) Algoritm Quicksort (array x, int l, int h) 1. if (l < h) 1. LocPivot = Partitionare(x, l, h) 2. Quicksort(x, l, LocPivot) 3. Quicksort(x, LocPivot +1, h) Algoritm Partitionare (array x, int l, int h) 1. pivot = x[l] 2. leftwall = l 3. for i = l+1 h (a) if (x[i] < pivot) 1. x[i] x[leftwall] 2. leftwall = leftwall +1 4. pivot x[leftwall] 5. return leftwall Operaţiile dominante ale algoritmului Quicksort au loc în procedura de partiţionare Estimare complexitate T(n): Problema este descompusă iterativ in două subprobleme cu dimensiune redusă la jumătate O subproblemă de dimensiune 1 costă O(1) operaţii Procedura de partiţionare costă, în cel mai rău caz, O(n) comparaţii 43

Sortare prin interclasare - Eficienţă Complexitate în cel mai rău scenariu: O(n 2 ) Complexitate în medie: O(n log(n)) Avantaje: Necesită memorie O(log(n)); mult mai redusă decât sortarea prin interclasare Reprezintă cea mai bună alegere când viteza este foarte importantă, indiferent de dimensiunea setului de date. Dezavantaje: Poate duce la umplerea stivei când se utilizează seturi largi de date. Performanţe modeste atunci când operează asupra unor liste aproape ordonate. Algoritmul de sortare rapidă este instabil! 44

Concluzii O mulţime de metode de sortare bazate pe comparaţii între chei, cu avantaje şi dezavantaje proprii Aplicaţia practică dictează alegerea metodei Metodele de sortare prin inserţie şi selecţie au performanţe bune când şirul de sortat are dimensiuni reduse Pentru şiruri de dimensiuni mari: sortare prin interclasare (Mergesort), sortare rapidă (Quicksort), etc. 45