Escolar Documentos
Profissional Documentos
Cultura Documentos
Metode de sortare
Lucrare pentru susinerea examenului de
atestat profesional la disciplina Informatic
Profesor coordonator:
Elev:
Pintea Eugen
Polocoer Oana
Clasa a XII-a B
An colar 2013-2014
Cuprins
Argument
Introducere
1.Metode directe
Bubble Sort
Selection Sort
Insertion Sort
2. Metode avansate
Quick Sort
Merge Sort
ShellSort
Concluzii
Imagini
Bibliografie
2
3
4
4
7
9
11
11
14
17
19
20
25
Argument
Am ales aceast tem cu scopul de a oferi informa ii importante
despre sortare , care este o metod (un algoritm), prin intermediul
creia se poate ordona o anumita clasa de obiecte concrete sau
abstracte, dupa unul sau mai multe criterii impuse , iar cutarea este o
metod, prin intermediul creia, se poate cuta, dupa criterii precizate,
pentru regsirea unui anumit obiect concret sau abstract ntr-o mul ime
ordonat sau nu de obiecte concrete sau abstracte.
n realitate, domeniul sortrii si cutarii ofer un mijloc ideal pentru
analiza unor game largi de subiecte generale importante ,cum ar fi :
cum se pot descoperi algoritmii buni;
cum se pot optimiza algoritmii si programele;
cum se poate analiza matematic eficiena algoritmilor;
cum se poate alege raional cel mai bun dintre algoritmii necesari
rezolvrii unei clase de probleme;
cum se pot aprecia nite algoritmi ca fiind cei mai buni posibili;
cum interactioneaz teoria calculelor matematice cu diverse
consideraii practice;
cum se pot utiliza eficient resursele calculatoarelor (memoriile
interne si externe de tipul discurilor magnetice sau optice);
Consider , c astfel voi ajuta la o mai bun ntelegere a sortrii ,in
contextul creia fiecare aspect important al programarii i gse te
rezolvarea.
Introducere
Definiie: Prin sortare nelegem algoritmul prin care putem rearanja k elemente ntr-o
anumit ordine (de exemplu: n ordine lexicografic, ordine cresctoare).
Sortarea reprezint una dintre cele mai utilizate metode de programare. Are
utilizri de la domenii precum matematic ( statistic atematic ), pn la limbi
( realizarea unor dicionare ). De aceea se impune s gsim cei mai convenabili algoritmi
i s prezentm avantajele i dezavantajele acestora. Ne vom rezuma la cei mai
importani.
Metodele de sortare se clasific n:
metode directe;
metode avansate;
1.Metode directe
Bubble Sort
Acest metod se rezum la a compara fiecare element cu celelalte, fcndu-se
interschimbarea dac elementul mai mare are indexul mai mic. Este cea mai simpl
metode de sortare i nu necesit cunoaterea detaliat a limbajului de programare. Poate
fi folosit cu succes de ctre nceptori.
Bubble sort este o metod de sortare simpl, eficient pentru un numr mic de
elemente (mai puin de 15), dar nu pentru tabele mari.
Nu necesit foarte mult memorie, dar este de dou ori mai
lent dect InsertionSort n aproape orice situatie.
Timpul de execuie depinde de input, adic de ordinea iniial al
elementelor.
Dac tabela este deja sortat e nevoie de un singur pas, adic N-1
comparri. n cazul cel mai nefavorabil sunt necesare N (N-1)/2
comparri si N (N-1)/2 interschimbri.
Performana algoritmului in caz general este mai greu de analizat , dar
este asemntor cazului nafavorabil. Complexitatea timpului al Bubble
sortului este O(N2).
BubbleSort nu folosete alte structuri de date i din aceast cauz este
recomandabil n cazurile cu puine elemente de sortat i n cazul n care memoria este
limitat.
Algoritmul n C++(neparametrizat):
void BubbleSort(Tip a[Nmax+1],int Size)
{
for(int i=0;i<Size;i++)
for(int j=i+1;j<=Size;j++)
if(a[i]>a[j])
{
Tip aux=v[i];
a[i]=a[j];
a[j]=aux;
}
Algoritmul n C++ (parametrizat):
Void Bubblesort_para(Tip a[Nmax+1],int size)
{
int ok=0,i;
do{
6
n acest caz , n cazul cel mai defavorabil numrul de comparaii este tot
NC=n(n-1)/2 dar spre deosebire de cellalt algoritm este mai rapid n cazurile
medii. (dac nu mai gsete dou elemente de interschimbat algoritmul se
oprete.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
6
4
3
3
2
2
2
1
1
1
1
5
5
5
5
4
4
4
4
3
3
3
2
2
1
4
4
4
5
3
3
3
4
2
2
6
3
6
2
3
3
3
2
2
2
5
2
5
1
2
2
1
1
4
1
3
1
4
4
4
6
1
1
1
1
5
5
5
5
5
5
5
6
6
6
5
6
6
6
6
6
6
6
Probleme propuse :
1. Care este numrul minim de interschimbri care vor sorta
7
Selection Sort
Selecia direct este una dintre cele mai simple metode de sortare i va lucra
foarte bine pentru tabele mici, fiecare element (nregistrare), este mutat cel mult o
dat. Implementarea algoritmului este simplu.
Algoritmul presupune c la fiecare pas "i " s se gseasc elementul minim
dintre a[i+1],a[i+2]...a[n] i se interschimb cu a[i].
Algoritmul este :
selection(a[nmax+1])
pentru i1 pn la n-1
{
mina[i]
pentru ji+1 pn la n
dac (a[j] < min)
mina[j]
}
dac (a[i]>min)
interschimb(a[i],a[j])
Se cheltuie cel mai mult timp cu cutarea elementului minim din partea nesortat a
tabelei. Cutarea se face de la stnga la dreapta. Pe parcursul fiecrui pas este necesar o
interschimbare, deci numrul interschimbrilor pentru N elemente este: N-1. Numrul total
al comparatiilor este :
deci este proportional cu N2. Timpul de execuie al algoritmului este de ordinul O(N 2)n
caz mediu i nefavorabil, chiar i cnd tabela este deja n ordine sortat (cresctoare).Este
o metod stabil.
1
2
3
4
5
1
1
1
1
5
3
3
3
6
6
4
4
3
3
5
2
2
2
4
4
4
6
Probleme propuse:
1. Artai ce conine vectorul {7 8 9 2 4 5 1 6} dupa 5 interschimbri.
9
Insertion Sort
Inseria direct aparine familiei de tehnici de sortare care se bazeaz pe metoda
"juctorului de bridge". Este un algoritm aproape la fel de simplu ca Selection sort,
dar poate mai flexibil. Considerm elementele A[1]...A[i-1] fiind sortate, inserm
elemental A[i] n locul ce i revine.
Fiind dat o tabel A cu N elemente nesortate, parcurgem tabela i le inserm
fiecare element n locul propriu ntre celelalte elemente considerate sortate. Pentru
fiecare i = 2...N , elementele A[1]...A[i] sunt sortate prin inserarea lui A[i] ntre lista
elementelor sortate: A[1]...A[i-1]. Elementele aflate n stnga indexului sunt n ordine
sortate dar nu sunt n poziia lor final. Tabela este sortat complet cnd indexul
ajunge la captul drept al tabelei.
ori, sortarea este de O(N2) .Dac tabela A conine inregistrri mari atunci e
preferabil folosirea unei"tabele de index":P, accesnd tabela original doar
pentru comparare,astfel costul este mai puin. Alt modalitate de mbunttire
const n folosirea unei matrici de pointeri pentru inregistrri.
10
10
1
2
1
1
5
2
6
5
7
6
10
7
2
10
Probleme propuse :
11
2. Metode avansate
Quick Sort
n practic algoritmul de sortare cel mai rapid este Quicksort numit sortare
rapid, care folosete partiionarea ca idee de baz.
Pentru tabele mari.
Este mai rapid dect orice metod de sortare simpl, se execut bine
pentru fiiere sau tabele mari, dar ineficient pentru cele mici.
Strategia de baz folosit este "divide et impera", pentru c este mai
uor de sortat dou tabele mici, dect unul mare.
Algoritmul este uor de implementat, lucreaz destul de bine n diferite
situaii i consum mai puine resurse dect orice alt metod de
sortare n multe situaii.
Necesit numai n jur de NlogN operai n cazul general pentru a sorta
N elemente.
Metoda QuickSort presupune gsirea poziiei finale pe care o ocup
elemenetul de pe prima poziie comparndu-l cu elementele din cealalt
partiie a tabelului, acest algoritm realizndu-se pn cnd partiia are 1
element.
Potrivit algoritmului, fiecare element este comparat cu pivoul, adic
operaiunea este de O(N), tabela este divizat n dou pri, fiecare parte este
divizat iari n dou. Dac fiecare parte este mprit aproximativ n
jumtate, va rezulta log2N mpriri. Deci timpul de executie al
Quicksortului n caz mediu este de O(N log2 N), iar n caz nefavorabil O(N2).
Quicksort este o metod bun n caz general, dar nu i n caz nefavorabil
cnd este preferabil folosirea a 3 indicii de impartire. Randomizarea este o
idee important si folositoare, o unealt general pentru a mbuntti
algoritmul. Quicksort este sensibil la ordinea datelor de intrare. Nu este o
metod stabil.
12
Algoritmul este :
mparte (st,dr,p)
{
ist
jdr
ii0
jj-1
ct timp (i<j)
{
daca (a[i]>a[j])
{
auxa[i]
a[i] a[j]
a[j] aux
auxii
ii -jj
jj-aux
}
ii+ii
jj+jj
}
}
QuickSort(st,dr)
{
daca st<dr
{
mparte (st,dr,p)//se determin poziia p pe care o ocup
primul element
QuickSort (st,p-1);
QuickSort (p+1,dr);
13
Probleme propuse :
14
Merge Sort
Algoritmul de sortare prin interclasare se bazeaz pe urmtoarea idee: pentru
a sorta o tabela cu N elemente l mprim n dou tabele pe care le sortez separat
i le intrclasam. Este o metod de sortare care folosete strategia de baza "divide
et impera", conform creia problema se descompune n alte dou subprobleme de
acelai tip i dup rezolvarea lor rezultatele se combin. Algoritmul sorteaz
elementele n ordine cresctoare.
Tabelul se mparte n n/2, dup aceea tabelele se mpart n jumtate, tot aa
pn cnd tabelele formate au mai puin sau cel mult de k elemente (n cazul
nostru k=2-este cel mai uor s compari 2 elemente).
Algoritmul presupune :
1.
2.
3.
4.
Probleme propuse :
1. Cte comparaii va folosi Mergesort pentru a sorta cheile: 4,6,5,1,4,7,-1,2,8,9?
2. Modificai algoritmul Mergesort ca s obinei un algoritm de sortare prin
interclasarea listelor cu dou ci.
3. Scriei un program care folosete algoritmul de sortare prin interclasare cu
dou ci pentru N=1000 de inregistrri, cmpul cheie fiind de tip ir de
caracter .
4. Comparai algoritmele bazate pedivide et impera MergeSort i
QuickSort prin implementarea pe un ir format din 3500 elemente.
( acestea se pot da prin folosirea funciei random())
17
ShellSort
Sortarea cu micorarea incrementului (shellsort) este o extensie simpl al Insertion
sortului care ctig vitez permind schimbarea elementelor aflate departe. Ideea de
baz o constituie rearanjarea elementelor din tabela A n aa fel nct, lund fiecare a h-a
element (ncepnd de oriunde), s obinem o tabel sortat. Astfel spunem c tabela este
h-sortat. O tabel , h-sortat este format din h subtabele sortate independent,
intercalate. Folosind astfel o procedur pentru fiecare secven a valorii lui h care se
termin n 1, va produce o tabel sortat.
Exemplu
18
Eficiena algoritmului Shell sort este greu de analizat, greu de comparat cu alte
metode, nici timpul de rulare nu este cunoscut sigur.
Shellsort este metod aleas pentru multe aplicaii de sortare pentru c are un
timp de execuie accesibil chiar i pentru o tabel moderat de mare (mai puin de
5000 elemente) i este o metod stabil.
19
Probleme propuse :
1.
2.
Concluzii :
Algoritmul
Complexitatea
O(n2)
O(n2)
O(n2)
O(n3/2 ) (estimat)
O(nlog2)
O(nlog2n)-caz mediu
O(n2)-caz defavorabil
Insertion Sort
Buble Sort
Selection Sort
Shell Sort
Merge Sort
Quick Sort
20
Imagini
Bubble Sort
21
Selection Sort
Insertion Sort
22
Quick Sort
23
Merge Sort
Shell Sort
24
Bibliografie
Manualul de informatic clasa a XI-a ,
autori: Vlad Huanu i Tudor Sorin
www.wikipedia.ro
www.software.ucv.ro
www.apaal.wordpress.com
www.sortari.weebly.com
www.cforbeginners.com
www.info.mcip.ro
Manualul de informatic intensiv
XI ,Autor: Mariana Milosescu
www.algorex.3x.ro
25
26