Sunteți pe pagina 1din 0

Tema: Studiu asupra

algoritmilor de sortare
Structuri de date i algortimi
Metode de sortare
Definiie : Prin sortare nelegem algoritmul prin care putem rearanja k
elemente intr-o anumita ordine.
Metode de
sortare
Metode
directe
S. Prin
selecie
SelectSort
S. Prin
inserie
InsertionSort
M. Bulelor
BubbleSort
Metode
avansate
S. Rapid
QuickSort
S. Interclasare
MergeSort
ShellSort
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 situaie. Aceast metoda se rezuma la a compara fiecare
element cu celelalte, fcndu-se interschimbarea daca elementul mai mare
are indexul mai mic. Este cea mai simpla metode de sortare si nu necesita
cunoaterea detaliata a limbajului de programare.
BubbleSort
void Bubbl eSor t ( Ti p a[ Nmax+1] , int Si ze) {
for( int i =0; i <Si ze; i ++)
for( int j =i +1; j <=Si ze; j ++)
if( a[ i ] >a[ j ] ) {
Ti p aux=v[ i ] ;
a[ i ] =a[ j ] ;
a[ j ] =aux;
}
Exemplu de
sortare
{6, 5, 4, 3, 2, 1}
Probleme propuse :
1. Care este numrul minim de
interschimbri care vor sorta permutarea
10 11 1 5 6 7 3 4 2 9 8
2. Artati continutul tabelei 5 89 10 11 23
78 4 2 3 -1 dup a cincea interschimbare
realizata prin metoda bulelor.
3. Cate operatii de comparatii se fac la
primul exemplu?
4. Dupa ce studiati si celelalte metode de
sortare directe aratati de ce BubbleSort
este mai lenta decat InsertionSort si decat
SelectionSort precum si numarul de
comparatii si interschimbari facute inutil !
Selecia direct este una dintre cele mai simple metode de sortare
si va lucra foarte bine pentru tabele mici, fiecare element (nregistrare), este
mutat cel mult o dat.. Implementarea algoritmului este simplu.
Algoritmul presupune ca la fiecare pas i sa se gaseasca
elementul minim dintre a[i+1], a[i+2]a[n] si se interschimba cu a[i].
SelectionSort
Sel ect i on ( t ype a[ ] , int si ze) {
int i , j ;
t ype mi n, t ;
for ( i =1; i <=si ze- 1; i ++ ) {
mi n = a[ i ] ;
for ( j = i +1; j <= si ze; j ++ )
if ( a[ j ] <mi n ) mi n = a[ j ] ;
if ( a[ i ] >mi n) t =a[ mi n] ; a[ mi n] =a[ i ] ; a[ i ] =t ;
}
}
Exemplu (sirul initial este : {5, 6, 1, 2, 4, 3 })
Probleme propuse:
1. Aratati ce contine vectorul {7 8 9 2 4 5 1 6} dupa 5
interschimbari.
2. Implementai algoritmul folosind structura
repetitivawhile
Fiind dat o tabel A cu N elemente nesortate, parcurgem tabela si 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 sortat dar nu sunt n pozitia lor
final. Tabela este sortat complect cnd indexul ajunge la captul drept al
tabelei.
InsertionSort
I nser t i on ( t ype A[ ] , int si ze ) {
int i , j ; t ype v;
for ( i = 2; i <= si ze; i ++ ) {
v = A[ i ] ; j = i ;
while ( A[ j - 1] > v ) { / / mut elementele cu o pozitie in fata
A[ j ] = A[ j - 1] ;
j - - ;
}
A[ j ] = v; / / pun elem in poz lui
}
}
Exemplu ( sirul initial este :{5,6,7,10,1,2})
Probleme propuse :
1. Artai coninutul tabelei: 5 6 8 9 10 15 4 7 3 -1 dup a
patra interschimbare a realizata prin metoda insertiei direct.
2. S se gseasc timpul de rulare minim si maxim n funcie
de N, pentru programul care foloseste algoritmul InsertionSort
.
n practic algoritmul de sortare cel mai rapid este
Quicksort numit sortare rapid. 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 usor de
sortat dou tabele mici, dect una mare.
Algoritmul este usor de implementat, lucreaz destul de
bine n diferite situaii si consum mai putine resurse dect
orice alt metod de sortare n multe situatii.
Metoda QuickSort presupune gsirea poziiei finale pe
care o ocupa elementul de pe prima poziie comparndu-l cu
elementele din cealalt partiie a tabelului, acest algoritm
realizndu-se pana cnd partiia are 1 element.
QuickSort
Procedeul se va repeta cu cele 2 partitii ((1,j-1) si (i,n) pana
cand fiecare partitie va avea un element:
Qui cksor t ( t ype A[ ] , int st , int dr ) {
int i , j ;
t ype v, t ;
if ( dr >st ) {
v=A[ dr ] ; i =st - 1; j =dr ; /*indice=ultimul element */
for ( ; ; ) {
while ( A[ ++i ] <v ) ;
while ( A[ - - j ] >v ) ;
if ( i >=j ) break;
t =A[ i ] ; A[ i ] =A[ j ] ; A[ j ] =t ;
}
t =A[ i ] ; A[ i ] =A[ r ] ; A[ r ] =t ;
Qui cksor t ( A, st , i - 1) ;
Qui cksor t ( A, i +1, dr ) ;
}
}
Probleme propuse :
1. Scriei un program care combin algoritmii de
sortare Quicksort cu Bubblesort astfel: utilizeaz Quicksort
pentru obinerea de partiii nesortate de lungime m, 1< m < n,
apoi utilizeaz Bubblesort pentru terminarea sortrii.
2. Scriei un program care combin algoritmii de
sortare Quicksort si SelectionSort astfel: utilizeaz Quicksort
obinerea de partiii nesortate de lungime m, 1< m < n, apoi
utilizeaz selectare directa pentru terminarea sortrii.
struct date{
int a; char *p;
date *next;
};
date *prim;
void f1(){date *q;
q=new date; q=new date; q=new date;
deleteq;
}
int f2(date *p){ date *q;q=new date;prim=q; return0;}
void f3(int k){for(int i=0;i<k;i++)prim=new date;}
int main(){
prim=NULL;
f1();
f2(prim);
f3(5);
}
Calcularea necesarului de memorie pentru fiecare funcie. Pentru ntreg programul.
Care este minimul necesar de memorie pentru Bloc de date, Stiv, Heap, pentru ca acest
program s fie funcional ?

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