Ministerul Educaţiei al Republicii Moldova Universitatea Tehnică a Moldovei
Catedra Informatica Aplicată
RAPORT Lucrarea de laborator nr. la Structuri de date si algoritmi
A efectuat! st. "r. #I$%&%
'.Cucu
A verificat! dr.( conf.univ.
M. )ulev
Chi*inău +,%
Lucrarea de laborator nr.6 Tema: Anali-a emperică a al"oritmilor de sortare ș i de căutare Scopul lucrării: bținerea deprinderilor de anali-ă emperică a al"oritmilor Sarcina de lucru: 'e scris un pro"ram in limba/ul C pentru anali-a emperică a al"oritmului
propus 0după variantă1 care afișarea meniului cu următoarele obțiuni! %. Tabloul demonstrativ de n elemente 0n23+,1 +. Tablou cu valori aleatoare pentru trei numere n%( n+( n4 de elemente mari 0%,,,,2n%2n+3+5n%2n43+5n+1 4. Tablou sortat crescător 6. Tablou sortat invers 0descrescător1 &. Anali-a al"oritmului funcției standard de sortare qsort() sau funcției standard de căutare bsearch()
Anali-a emperică a al"oritmului constă 7n! determinarea timpului de rulare( numărului de compărări( numărului de interschimbări 0muțări1( compărarea re-ultatelor obț inute ș i aran/ate 7n tabela și formularea conclu-iilor.
arianta !": qsort() 8uic9sort efectuea-ă sortarea ba-:ndu$se pe o strate"ie divide et impera. Astfel( el 7mparte lista de sortat 7n două subliste mai ușor de sortat. ;așii al"oritmului sunt! %. #e ale"e un element al listei( denumit pivot +. #e reordonea-ă lista astfel 7nc:t toate elementele mai mici dec:t pivotul să fie plasate 7naintea pivotului și toate elementele mai mari să fie după pivot. 'upă această parti ționare( pivotul se află 7n po-iția sa finală. 4. #e sortea-ă recursiv sublista de elemente mai mici dec:t pivotul și sublista de elemente mai mari dec:t pivotul. listă de dimensiune , sau % este considerată sortată. ;seudocod 8uic9#ort! procedura 8UIC)#RT0A( inf( sup1 este < i= inf < /= sup < >= A?0i@/1 div + < repeta < < cat timp 0i2sup1B 0A?i2>1 e>ecuta i= i@% < < cat timp 0/Dinf1 B 0A?/D>1 e>ecuta /= /$% < < daca i 23/ atunci
< < < t= A?i A?i= A?/ A0/1= t < < < i= i@% /= /$% < < ( i( /( t i 3 inf / 3 sup > 3 A?0i @ /1 B + do H #hile 0 0i 2 sup1 0A?i 2 >1 1 i@@ #hile 0 0/ D inf1 0A?/ D >1 1 /$$ i$ 0 i23 / 1 H
t 3 A?i
A?i 3 A?/ A?/ 3 t i@@ /$$ J J #hile 0 i 23 / 1 i$ 0 inf 2 / 1 8UIC)#RT0inf( /1 i$ 0 i 2 sup 1 8UIC)#RT0i( sup1
J
%odul pro&ramului Kinclude 2stdio.hD Kinclude 2stdlib.hD Kinclude 2time.hD lon" sortC0int 5a(int n1 H int i(/(pas(au> lon" nrFi 3 , for0pas3nB+ pasD, pasB3+1 for0i3pas i2n i@@1 for0/3i$pas /D3, a?/Da?/@pas /$3pas1 H au> 3 a?/
a?/ 3 a?/@pas a?/@pas 3 au> nrFi@@ J return nrFi J lon" sort'0int 5a(int n1 H int i(/(pas(au> lon" nrFi 3 , for0pas3nB+ pasD, pasB3+1 for0i3pas i2n i@@1 for0/3i$pas /D3, a?/2a?/@pas /$3pas1 H au> 3 a?/ a?/ 3 a?/@pas a?/@pas 3 au> nrFi@@ J return nrFi J int main01 H int dimension( m 3 %(comand float times int 5vector 3 ULL Nhile0%1 H Nhile0m1 H m 3 , sOstem0PclsP1 fflush0stdin1 printf0PIntroduceti marimea vectorului 0numarul de elemente1 ! P1 scanf0PQdP(dimension1 vector 3 0int51malloc0dimension 5 si-eof0int11 if0vector1 H printf0PnMemoria nu a fost alocata Incercati din nou.anP1 m 3 % J J sOstem0PclsP1 fflush0stdin1 printf0PMeniu sortare !nnP1 printf0P? % In ordine crescatoarenP1 printf0P? + In ordine descrescatoarennP1 printf0P? , E>itnnP1 printf0PComand DD P1
scanf0PQdP(comand1 sOstem0PclsP1 sNitch0comand1 H case , ! if0vector1 free0vector1 return , brea9 case % ! doH sOstem0PclsP1 fflush0stdin1 printf0PCe sortamSSnP1 printf0P? % Un tablou de/a sortatnP1 printf0P? + Un tablou aleatoriunP1 printf0P? 4 Un tablou sortat inversnnP1 printf0P? , InapoiSnnP1 printf0PComand DD P1 scanf0PQdP(comand1 sOstem0PclsP1 sNitch0comand1 H case , ! brea9 case % ! for0int i3, i2dimension i@@1 H vector?i 3 i J times 3 cloc901 printf0P#ortarea sa efectuat in Qf secunde si sau produs Qd schimbarinP( 0cloc901$times1BCLC)#F;ERF#ECsort0vector(dimension11 sOstem0PpauseP1 brea9 case + ! srand0time0ULL11 for0int i3, i2dimension i@@1 H vector?i 3 rand01 Q %,, J times 3 cloc901 printf0P#ortarea sa efectuat in Qf secunde si sau produs Qd schimbarinP( 0cloc901$times1BCLC)#F;ERF#EC(sortC0vector(dimension11 sOstem0PpauseP1 brea9 case 4 ! for0int i3, i2dimension i@@1 H vector?i 3 dimension $ i J times 3 cloc901 printf0P#ortarea sa efectuat in Qf secunde si sau produs Qd schimbarinP( 0cloc901$times1BCLC)#F;ERF#EC(sortC0vector(dimension11 sOstem0PpauseP1 brea9 default ! printf0PaAti introdus o comanda "resitanP1 brea9 J JNhile0comand1 brea9 case + !
doH sOstem0PclsP1 fflush0stdin1 printf0PCe sortamSSnP1 printf0P? % Un tablou de/a sortatnP1 printf0P? + Un tablou aleatoriunP1 printf0P? 4 Un tablou sortat inversnnP1 printf0P? , InapoiSnnP1 printf0PComand DD P1 scanf0PQdP(comand1 sOstem0PclsP1 sNitch0comand1 H case , ! brea9 case % ! for0int i3, i2dimension i@@1 H vector?i 3 dimension $ i J times 3 cloc901 printf0P#ortarea sa efectuat in Qf secunde si sau produs Qd schimbarinP( 0cloc901$times1BCLC)#F;ERF#EC(sort'0vector(dimension11 sOstem0PpauseP1 brea9 case + ! srand0time0ULL11 for0int i3, i2dimension i@@1 H vector?i 3 rand01 Q %,, J times 3 cloc901 printf0P#ortarea sa efectuat in Qf secunde si sau produs Qd schimbarinP( 0cloc901$times1BCLC)#F;ERF#EC(sort'0vector(dimension11 sOstem0PpauseP1brea9 case 4 ! for0int i3, i2dimension i@@1 H vector?i 3 i J times 3 cloc901 printf0P#ortarea sa efectuat in Qf secunde si sau produs Qd schimbarinP( 0cloc901$times1BCLC)#F;ERF#EC(sort'0vector(dimension11 sOstem0PpauseP1brea9 default ! printf0PaAti introdus o comanda "resitanP1 brea9 J JNhile0comand1 brea9 default ! printf0PaAti introdus o comanda "resitanP1 brea9 J sOstem0PpauseP1 J return , J
Re'ultatele obtinute
%onclu'ii! In urma acestei lucrari de laborator am a/uns la ideia ca shell sort este un al"oritm de sortare bun( insa nui asa de rapid ca sort. ;entru sirurile de/a aran/ate se face , 0-ero1 mutari( ceia ce ii un re-ultat bun pentru vite-a efectuarii. Inca un plus pentru acest al"oritm este ca nu necesita memorie adau"atoare fata de sort. iblio&ra$ie: • •
• •
•
http!BBpro"rammersclub.ruB,%B TTUL 'E#;RE C #I C@@ 0MAUALUL U'AMETAL 'E ;RRAMARE I C #I C@@1?R?)ris Vamsa?Lars )land Limba/ul C pentru clasa a$IW$a http!BBNNN.scribd.comBdocB6%+X4Y+6Be"rescu$Liviu$Limba/ele$C$si$C$ pentru$incepatori$vol$% http!BBdevcentral.iftech.comBlearnin"BtutorialsBc$cppBc