Sunteți pe pagina 1din 28

Tema Novac: S se construiasc dou clase cu numele Sortare prin inserie i sortare prin selecie, prin care s se ordoneze

un ir prin cele dou metode, la fiecare faz a ordonarii s afieze irul. + algoritm pt. ec. de gr 1 si 2.

1. Merge-sort

//Merge-sort este la fel ca si Quick-sort, o metoda eficienta de sortare. Se procedeaza astfel: //se sorteaza recursiv(crescator) prima jumatate a vectorului, apoi se sorteaza recursiv(crescator) csi a doua jumatate a vectorului. //urmeaza faza de com inare a solutiilor, adica constructia vectorului ordonat pe aza a doi vectori ordonati. //vom construi un alt vector , vectorul ordonat rezultat din cele doua parti si il vom copia in a, in pozitiile corespunzatoare.

!include"iostream.#$ !include"conio.#$ int a%&'(,n) //se realizeaza o functie pentru interclasare void interclasare(int i, int m, int j) * int %&'()

//vectorul initial se imparte in doua secvente, aceasta se imparte la randul ei, s.a. pana se ajunge la doua elemente, care se compara //dupa interclasarea celor doua, se e+ecuta procesul ptr urmatoarele elemente, s.a. int +,i) int k,-) int .,m/-)

0#ile(+",m 11 .",j) if (a%+("a%.() %k//(,a%+//() else %k//(,a%.//() 0#ile (+",m) %k//(,a%+//() 0#ile (.",j) %k//(,a%.//() int t,i) for (k,-)k",(j-i)/-)k//) a%t//(, %k() 2 void div3imp(int i, int j) * if (i"j) * int m,(i/j)/&) //se alege mijlocul div3imp(i,m)) div3imp(m/-,j)) interclasare(i, m, j)) 2 2 void main()

* cout""4n,4) cin$$n) for(int i,-)i",n)i//) * cout""4a%4""i""4(,4) cin$$a%i() 2 div3imp(-,n)) for(int i,-)i",n)i//) cout""a%i(""4 4) getc#()) 2

Pentru a stabili complexitatea algoritmului de sortare prin interclasare, remrcam urmatoarele: - pentru un tablou cu n elemente, numrul de njumtiri succesive pn se ajunge la zone de lungime 1 sau 2 este de aproximativ log2n; - la fiecare din aceste divizri succesive, se mut din tab n tab1 i invers n total n elemente. In consecinta, numarul de operatii elementare executate este de ordinul O(n.log(n)). Mai riguros, daca notam cu C(n) numarul de operaii elementare pentru sortarea unui tablou cu n componente i avem n vedere c, la fiecare pas al algoritmului, se fac doua invoc ri recursive ale metodei de sortare i o interclasare, iar interclasarea are complexitatea n, atunci C(n) = 2.C(n/2)+n Continund acest raionament, putem scrie C(n) = 2(2C(n/4)+n/2)+n = 4C(n/4) + n + n Algoritmul se oprete dup log2(n) astfel de pai, cnd se obine C(n) = nC(n/n) + n + n + ... + n = n.log2(n) In consecin, complexitatea algoritmului de sortare prin interclasare este O(n.log2(n)). Constatm deci c, pentru tablouri cu numar mare de componente, timpul de calcul este mult mai mic n cazul sortrii prin interclasare, dect n cazul folosirii algoritmilor simpli, cum ar fi cel al seleciei, inseriei sau al bulelor, a cror complexitate este O(n2). Algoritmul de sortare prin interclasare consum ns de dou ori mai mult memorie dect cei simpli mentionai, deoarece necesit spaiu suplimentar pentru tabloul auxiliar .

2. Quicksort

//5rdonarea Quick-sort este cele ra si una dintre metodele performante de sortare. //6deea algoritmului este simpla: in vectorul cu capetele inf...sup alegem un element numit pivot si apoi rearanjam elementele vectorului astfel incat in stanga sa se grupeze elemente mai mici sau egale cu pivotul, iar la dreapta elemente mai mari decat pivotul. //in implementare vom alege ca pivot primul element al vectorului, apoi vom folosi doua varia ile contor i si j cu care ne deplasam spre dreapta, resp. stanga. //apoi amplasam pivotul pe pozitia dintre cei doi su vectori care se formeaza si apelam 7uick3sort pentru acestia. //8rocesul recursiv se e+ecuta doar daca cele doua limite sunt diferite.

!include"iostream.#$ !include"conio.#$ int a%&'(, n) void 7uick3sort(int 9a, int inf, int sup) //inf si sup sunt capetele vectorului *

if(inf"sup) * int pivot,a%inf() pivot, int au+) int i,inf/-, j,sup) //se alege un

//re-aranjam elementele vectorului astfel incat in stanga sa se grupeze elementele mai mici sau egale cu pivotul, iar la dreapta elementele mai mari decat pivotul. //pivotul se alege defapt primul element al vectorului. //cu i si j ne deplasam la dreapta, resp. la stanga. 0#ile(i",j) *

0#ile(i",sup 11 a%i(",pivot) i//) 0#ile(j$,inf 11 a%j($pivot) j--) if(i"j 11 i",sup 11 j$,inf) *

au+,a%i() a%i(,a%j() a%j(,au+) 2 2 i--) a%inf(,a%i() a%i(,pivot) //amplasam pivotul pe pozitia dintre cei doi su vectori care se formeaza(unul cu elemente mai mici sau egale, unul cu elemente mai mari) 7uick3sort(a, inf, i--)) //si apelam 7uick3sort pentru acestia.

7uick3sort(a, i/-, pivot)) 2 2 void afisare() *

int i) cout""4vectorul sortat este: 4) for(i,') i"n) i//) cout""a%i(""4 4) 2 void main() * int i) cout""4n,4) cin$$n) for(i,') i"n) i//) *

cout""4a%4""i""4(,4) cin$$a%i() 2 7uick3sort(a, ', n--)) afisare()) getc#())

Pentru a stabili complexitatea algoritmului Quick Sort aplicat unui tablou cu n componente, notm cu C(n) numrul de comparaii efectuate i remarcm c, la fiecare pas al algoritmului au loc n comparaii nsoite de interschimbri ale elementelor i dou invocari recursive ale metodei de sortare, deci C(n) = n + C(k)+C(n-k) unde k este numrul de componente din zona din stnga a tabloului, iar C(k) si C(n-k) sunt complexitile pentru cele dou subzone care urmeaz a fi sortate recursiv. Situaia este asemanatoare cu cea ntalnit n cazul metodei MergeSort, cu deosebirea c , n acest caz, tabloul nu se mai mparte n dou pri egale. Cazul cel mai favorabil ar fi cnd, la fiecare recursie, cele dou subzone (cu elemente mai mici i respectiv mai mari decat elementul pivot) ar fi egale. n acest caz, calculul complexitii se face la fel ca la MergeSort i deci complexitatea este O(n.log(n)). Cazul cel mai defavorabil ar fi cel n care, la fiecare recursie, elementul pivot ar fi ales n mod atat de nefericit, ncat una din cele dou subzone obinute dup interschimb ri ar fi vida. In acest caz C(n) = n + C(n-1) = n + (n-1) + C(n-2) = ... sau, continuand pana la C(1) C(n) = n + (n-1) + (n-2) + ... + 1 = (n+1)n/2 i deci complexitatea algoritmului este O(n2). Acest caz "nefericit" este ns foarte pu in probabil. Cel mai probabil este c, n realitate, complexitatea sa fie situat n jurul valorii O(n.log(n)).

3. Heapsort

!include"iostream.#$ !include"conio.#$. //functia reconstituie3#eap: //datele de intrare sunt un vector : si un indice //nodurile stang(i) si drept(i) sunt #eap-uri //dar cum elementul :%i( poate fi mai mic decat descendantii sai, este posi il ca acesta sa nu //respecte proprietatea de #eap. //aceasta functie face ca su ar orele care are radacina in valoarea elementului de indice i,

//sa devina #eap. void reconstituie3#eap(int 9:, int i, int dimensiune) * int a, ma+im, stang,&9i/-, drept,stang/-) if(stang"dimensiune 11 :%stang($:%i() ma+im,stang) else ma+im,i) if(drept"dimensiune 11 :%drept($:%ma+im() ma+im,drept) if(;ma+im,,i) * a,:%i() :%i(,:%ma+im() :%ma+im(,a) reconstituie3#eap(:, ma+im, dimensiune)) 2 2 //functia construieste3#eap: //toate elementele su sirului :%%n/&(/-...n( sunt frunze, ele pot fi considerate #eap-uri //formate din cate un element. //functia traverseaza restul elementelor si e+ecuta functia reconstituie3#eap pentru fiecare nod //intalnit.

//ordinea de prelucrare a nodurilor satisface cerinta ca su ar orii, avand ca radacina //descendenti ai nodurilor i sa formenze #eap-uri inainte ca reconstituie3#eap sa fie e+ecutat //pentru aceste noduri. void construieste3#eap(int 9:, int dimensiune) * int i) for(i,(dimensiune-&)/&) i$,') i--) reconstituie3#eap(:, i, dimensiune)) 2 void #eapsort(int 9:, int dimensiune) * int i, temp) construieste3#eap(:, dimensiune))

for(i,dimensiune--) i$,-) i--) * temp,:%i() :%i(,:%'() :%'(,temp) dimensiune,dimensiune--) reconstituie3#eap(:, ', dimensiune)) 2 2 void main()

* int n, :%<'() cout""4n,4) cin$$n) int i) for(i,') i"n) i//) * cout""4:%4""i""4(,4) cin$$:%i() 2 #eapsort(:,n)) cout""4sirul sortat este: 4) for(i,') i"n) i//) cout"":%i(""4 4) getc#()) 2

Complexitatea algoritmului este O(nlog(in baza 2)n). 4. Shellsort

//S#ellsort //Sortarea cu micsorarea incrementului este o e+tensie simpla al insertion sortului care castiga viteza permitand sc#im area elementelor aflate departe. //6deea de aza o constituie rearanjarea elementelor din vector in asa fel incat, luand fiecare element (incepand de oriunde), sa o tinem o ta ela sortata. //:stfel spunem ca vectorul a este sortat.

!include"iostream$ using namespace std) int a%-''-(,n) void s#ellsort(int a%-''-(,int n) * int j,i,m,au+) for(m , n/&)m$')m/,&) * for(j , m)j",n)j//) * for(i,j-m)i$,')i-,m) * if(a%i/m($,a%i() reak) else * au+ , a%i() a%i( , a%i/m() a%i/m( , au+) cout""4S-a efectuat o intersc#im are : a%4""i""4( , 4""a%i( ""4 cu a%4""i/m""4( , 4""a%i/m() cout""4Starea vectorului este : 4)

for(int #,-)#",n)#//) cout""a%#(""= =) 2 2 2 2 2

void main () * int i) cout""4n,4) cin$$n) cout""4>n?ectorul @esortat este: 4) for(i,-)i",n)i//) cin$$a%i() s#ellsort(a,n)) cout""4>n>n>n?ectorul sortat este: 4) for(i,-)i",n)i//) cout""a%i(""4 4) 2

Complexitatea algoritmului: 1. Cazul cel mai favorabil cnd vectorul e sortat cresctor: omega(n); 2. Cazul cel mai nefavorabil cnd vectorul e sortat descresc tor: O(n2). 5. Selective sort Acest algoritm selecteaza la fiecare pas i cel mai mic element din vectorul de la pasul i+1

pana la n. Valoarea minima de la pasul i este pusa in vector la pozitia i, facandu-se interschimbarea cu vectorii mari; in majoritatea cazurilor oferind rezultate mai slabe decat insertion sort.

void selective(int a%(,int n) * int i,au+,min,minat) for(i , ') i " n - -)i//) * minat , i) min , a%i()

for(j , i / -)j " n)j//) //selectam minimul din vectorul ramas( de la i/- la n) * if(min $ a%j() * minat , j) min , a%j() 2 2 au+ , a%i( ) a%i( , a%minat() a%minat( , au+) 2 2 //intersc#im are //pozitia elementului minim //sortare crescatoare

6. Insertion sort Sortarea prin insertie seamana oarecum cu sortarea prin selectie. Tabloul este impartit imaginar in doua parti - o parte sortata si o parte nesortata. La inceput, partea sortata contine primul element al tabloului si partea nesortata contine restul tabloului. La fiecare pas, algoritmul ia primul element din partea nesortata si il insereaza in locul potrivit al partii sortate. Cand partea nesortata nu mai are nici un element, algoritmul se opreste.

void insertion(int a%(, int n) * int i, j, au+) for (i , -) i " n) i//) * j , i) 0#ile (j $ ' 11 a%j - -( $ a%j() * au+ , a%j() a%j( , a%j - -() a%j - -( , au+) j--) 2 2 2

3. Sortareaprin insertie Aceasta metoda aseaza elementul citit pe pozitia lui finala in vector, comparandul cu valorile introduse deja si interschimbandul pana ajunge in pozitia corecta.

Pas 1 : Se citeste primul element Pas 2 : De la al doilea pana la ultimul element se executa Pas 2.1 : Se citeste un nou element Pas 2.2 : Cat timp valoarea este mai mica decat cea din fata si n-am ajuns la primul element se executa Pas 2.2.1 : Se interschimba elementul cu cel precedent Pas 2.2.2 : Se deplseaza cu o pozitie spre stanga Pas 3 : Se reia de la pasul 2 pana se termina de citit vectorul

!include "iostream.#$

int main() * int v%-''(,n,i,j,au+) cout""4n, 4)cin$$n) cout""4v%-(, 4)cin$$v%-() for(i,&)i",n)i//) * cout""4v%4""i""4(, 4) cin$$v%i() j,i) 0#ile(v%j("v%j--( 11 j$-) * au+,v%j() v%j(,v%j--() v%j--(,au+) j--)

2 2

cout""4?ectorul sortat este: 4) for(i,-)i",n)i//) cout""v%i(""4 4)

return ') 2

LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

1. /* CREATED : 17.11.2002 2. MODIFIED : 05.03.2004 (added Shaker-S r!" 3. 4. A#$ORITMI DE SORTARE 5. -------------------%. &r 'ra( )are *(+,e(e-!ea.a (a* (/,!* a,' r*!(* de 0 r!are a0/+ra /-/* 7. 1e)! r de -/(ere *-!re'*. A/ 2 0! *(+,e(e-!a!* a,' r*!(**: 3. 4. 1. 5/66,e-S r! ((e! da 6/,e, r" 10. 2. 7/*)k-S r! (0 r!are ra+*da" 11. 3. S r!are +r*- -/(arare 12. 4. S r!are +r*- *-0er!*e 13. 5. She,,-S r! (h-0 r!are" 14. %. S r!are +r*- *-!er0)h*(6are 15. 7. Shaker-S r! 1%. 17. I-!er0)h*(6area a d /a -/(ere a 2 0! rea,*.a!a *- d /a 1ar*a-!e8 /-a )are 13. +re0/+/-e 2 , 0*rea /-e* 1ar*a6*,e a/9*,*are8 *ar )ea,a,!a 2 , 0*-d d ar 14. +era!**,e ad/-are 0* 0)adere 20. 21. 6: Dark5:!e */
LINE NUMBER ON/OFF | EXPAND/CONTRACT | SELECT ALL

-. &. A. B.

!include4conio.#4 !include4dos.#4 !include4stdio.#4 !include4stdli .#4

<. C. D. E. F.

!include4string.#4 long int a%&''() int n, metoda, metoda3sort) c#ar i, ,Mouse,', Guttons, Hra0,') unsigned MouseI,', MouseJ,', MouseG,')

10.

--. -&. void init (void)) 13. void info (void)) -B. 15. void meniu (void)) -C. -D. void sortare3 ule (long int sir%(, int n)) -E. void sortare37uick (int i, int s, long int sir%()) -F. void sortare3numarare (long int sir%(, int n)) &'. void sortare3insertie (long int sir%(, int n)) &-. void sortare3s#ell (long int sir%(, int n)) &&. void sortare3intersc# (long int sir%(, int n)) 23. void sortare3s#aker (long int sir%(, int n)) &B. &<. void Sortare3sir (long int sir%(, int n, int metoda)) 26. void afisare3sir (long int sir%(, int n)) &D. 28. void s0ap (long int 9a,long int 9 , int metoda)) &F. A'. void main(void) A-. * A&. te+tmode(KE')) AA. init()) AB. meniu()) A<. 2 AC. void 6nitMouse(c#ar 96nst, c#ar 9Guttons) AD. * 38. unsigned 6) 39. unsigned c#ar G) 40. asm * B-. mov a+,') 42. int '+AA) BA. mov 6, a+) BB. mov G, l) 45. 2 46. if (6 ,, '+LLLL) 96nst , -) 47. else 96nst , ') BE. 9Guttons , G) BF. 2 <'. void S#o0Mouse(void) <-. * 52. asm * <A. mov a+,54. int '+AA) <<. 2

<C. 2 <D. void MideMouse(void) <E. * 59. asm * C'. mov a+,& 61. int '+AA) C&. 2 CA. 2 CB. void NeadMouse(c#ar Or) C<. * 66. unsigned int G , I+, J.) 67. asm * 68. mov a+, A) 69. int '+AA) D'. mov G , +) D-. mov I+, c+) D&. mov J., d+) 73. 2 74. if (Or) * D<. MouseG , G ) DC. MouseI , I+) DD. MouseJ , J.) 78. 2 79. else * E'. MouseG , G ) 81. MouseI , I+ / E / -) 82. MouseJ , J. / E / -) EA. 2 EB. 2 E<. void NestrictMouseI(unsigned I-, unsigned I&, c#ar Or) EC. * 87. if (;Or) * 88. I- , I- 9 E - -) 89. I& , I& 9 E - -) 90. 2 91. asm * 92. mov a+, D) FA. mov c+, I-) FB. mov d+, I&) 95. int '+AA) FC. 2 FD. 2 FE. void NestrictMouseJ(unsigned J-, unsigned J&, c#ar Or) FF. * 100. if (;Or) * 101. J- , J- 9 E - -) 102. J& , J& 9 E - -) 103. 2 104. asm *

105.
-'C. -'D.

108.

mov mov mov int

a+, E) c+, J-) d+, J&) '+AA)

-'F. 2 --'. 2 ---. void NestrictMouse(unsigned I-, unsigned J-, unsigned I&, u nsigned J&, c#ar Or) --&. * --A. NestrictMouseI(I-,I&,Or)) --B. NestrictMouseJ(J-,J&,Or)) --<. 2 --C. void Prite:t(c#ar I, c#ar J, c#ar 9@, c#ar L, c#ar G, c#ar Kol) --D. * 118. register int 6,8os) 119. unsigned int far 9?ideo8tr) 120. t.pedef struct * 121. int it3c#ar : E) 122. int it-3B : B) 123. int it<3D : A) 124. int itE : -) 125. 2 it3field) 126. union ?ideoQocation * -&D. it3field GL) 128. unsigned a) 129. 2?ideo) 130. ?ideo8tr , (unsigned int9) MR3L8 ('+GE'',')) -A-. 8os , Kol9(J--)/(I--)) 132. if (Hra0) MideMouse()) 133. for (6,8os)6"strlen(@)/8os)6//)* -AB. ?ideo.GL. it3c#ar,@%6-8os() -A<. ?ideo.GL. it-3B,L) -AC. ?ideo.GL. it<3D,G) -AD. ?ideo.GL. itE,') 138. ?ideo8tr%6( , ?ideo.a) -AF. 2 -B'. if (Hra0) S#o0Mouse()) -B-. 2 -B&. void SetMouse(unsigned I, unsigned J, c#ar Or) -BA. * 144. if (;Or) * 145. I , I 9 E - -) 146. J , J 9 E - -) 147. 2 148. asm * -BF. mov a+,B) -<'. mov c+, I) -<-. mov d+, J)

152.
-<A. -<B. -<<. -<C. -<D. -<E. -<F. -C'. -C-. -C&. -CA. -CB. -C<. -CC. -CD. 2

int '+AA)

2 void init(void) * n,<) a%'(,<) a%-(,-) a%&(,F) a%A(,A) a%B(,D) metoda3sort,-) metoda,-) 2 void info(c#ar 9s) * 168. int i) -CF. c#ar 9met) 170. Prite:t(-', - ,48rogram de sortare a unui sir de ma+im &'' de numere intregi4, -B,-, E')) 171. Prite:t(A, A ,4Setarile 4, -<, ', E')) 172. Prite:t(-&, A, s, -<, ', E')) 173. Prite:t(-& / strlen(s) / -, A, 4ale acestui program sunt :4, -<, ', E')) 174. Prite:t(<, B, 4- sirul de numere este -$4, -<, ', E')) 175. goto+.(A-, B)) -DC. te+tattr(F)) 177. for (i,') i"n) i//) 178. printf(4Sd 4,a%i()) 179. Prite:t(<, D, 4- metoda de sortare este 4, -<, ', E')) 180. s0itc# (metoda3sort)* 181. case - : met , 4Gu le-Sort.4) reak) 182. case & : met , 4Quick-Sort.4) reak) 183. case A : met , 4sortarea prin numarare.4) reak) 184. case B : met , 4sortarea prin insertie.4) reak) 185. case < : met , 4S#ell-Sort.4) reak) 186. case C : met , 4sortarea prin intersc#im are.4) reak) 187. case D : met , 4S#aker-sort4) 188. 2 -EF. Prite:t(A', D, met, -B, ', E')) 190. Prite:t(<, E, 4- metoda de intersc#im are este metoda 4, -<, ', E')) 191. s0itc# (metoda)* 192. case - : met , 4standard.4) reak) 193. case & : met , 4aritmetica.4) -FB. 2 -F<. Prite:t(BB, E, met, -B, ', E')) -FC. 2 -FD. void clear(void)

-FE.

* int i, j) for (i,-D) i",&<) i//) for (j,-) j",E') j//) Prite:t(j, i, 4 4, -<, ', E'))

199. 200. 201.


&'&. &'A. &'B. &'<.

2 void citire(long int sir%() * 206. c#ar c, 9s) 207. int i, j) &'E. clear()) &'F. n,') &-'. do* &--. Prite:t(-,-E,4Hati numarul de elemente al sirului:4,-B,',E')) &-&. goto+.(AF,-E)) &-A. 3setcursort.pe(3@5NM:QKTNS5N)) 214. gets(s)) 215. sscanf(s,4Sd4,1n)) &-C. 3setcursort.pe(3@5KTNS5N)) &-D. clear()) 218. 2 0#ile ((n"-)UU(n$&''))) &-F. 220. for (i,')i"n)i//)* &&-. Prite:t(-,-E,4Hati element: 4,-B,',E')) &&&. goto+.(-,-F)) &&A. 3setcursort.pe(3@5NM:QKTNS5N)) 224. scanf(4Sd4,1sir%i()) &&<. 3setcursort.pe(3@5KTNS5N)) &&C. clear()) &&D. goto+.(-,&-)) 228. for (j,')j",i)j//) printf(4Sd 4,sir%j()) &&F. 2 &A'. clear()) &A-. 2 &A&. int aleg3sort(void) &AA. * 234. c#ar c) &A<. clear()) &AC. Prite:t(-,-D,4KV S5NW:NV H5N6W6 X4,-B,',E')) &AD. Prite:t(-,-E,4-. Gu le-Sort4,-<,',E')) &AE. Prite:t(-,-F,4&. Quick-Sort4,-<,',E')) &AF. Prite:t(-,&',4A. Sortare prin numarare4,-<,',E')) &B'. Prite:t(-,&-,4B. Sortare prin insertie4,-<,',E')) &B-. Prite:t(-,&&,4<. S#ell-Sort4,-<,',E')) &B&. Prite:t(-,&A,4C. Sortare prin intersc#im are4,-<,',E')) &BA. Prite:t(-,&B,4D. S#aker-Sort4,-<,',E')) &BB. goto+.(-,&<)) &B<. 3setcursort.pe(3@5NM:QKTNS5N)) 246. do* &BD. c,getc#())

248. 249.
&<'. &<-. &<&. &<A. &<B. &<<.

20#ile ((c"=-=)UU(c$=D=))) printf(4Sc4,c)) 3setcursort.pe(3@5KTNS5N)) clear()) return c)

2 int aleg3met(void) * 256. c#ar c) &<D. clear()) &<E. Prite:t(-,-D,4Ke metoda de intersc#im are doritiX4,-B,',E')) &<F. Prite:t(-,-E,4-. Standard (cu folosire au+iliar)4,-<,',E')) &C'. Prite:t(-,-F,4&. :ritmetica (fara folosire au+iliar)4,-<,',E')) &C-. goto+.(-,&')) &C&. 3setcursort.pe(3@5NM:QKTNS5N)) 263. do* &CB. c,getc#()) 265. 20#ile ((c"=-=)UU(c$=&=))) 266. printf(4Sc4,c)) &CD. 3setcursort.pe(3@5KTNS5N)) &CE. clear()) &CF. return c) &D'. 2 &D-. c#ar 9optiune ( int i ) &D&. * 273. c#ar 9o) 274. s0itc# (i) * 275. case -:o,4 Kitire sir 4) 276. case &:o,4 :legerea algoritmului de sortare 4) 277. case A:o,4:legerea metodei de intersc#im are4) 278. case B:o,4 S5NWV:Y: ; 4) 279. case <:o,4 :fiseaza sir 4) 280. case C:o,4 6esire din program 4) 281. 2 &E&. return o) &EA. 2 &EB. void c#enar(int +, int .) &E<. * 286. int i) 287. for (i,')i",AA)i//) * &EE. Prite:t(+/i,.,4Z4,-<,',E')) &EF. Prite:t(+/i,./D,4Z4,-<,',E')) 290. 2 291. for (i,-)i",C)i//) * &F&. Prite:t(+--,./i,4[4,-<,',E')) &FA. Prite:t(+/AB,./i,4[4,-<,',E')) 294. 2

reak) reak) reak) reak) reak)

&F<. &FC. &FD. &FE. &FF. A''. A'-. A'&. A'A. A'B. A'<. A'C. A'D. A'E. A'F.

Prite:t(+--,.,4\4,-<,',E')) Prite:t(+/AB,.,4]4,-<,',E')) Prite:t(+--,./D,4^4,-<,',E')) Prite:t(+/AB,./D,4_4,-<,',E')) 2 int Oet5pt(int .) * return MouseJ-.) 2 void Nestore36mage(int indent, int top, int o) * te+t ackground(')) MideMouse()) clrscr()) 3setcursort.pe(3@5KTNS5N)) for (i,-)i",C)i//) Prite:t(indent,top/i,optiune(i),E,',E')) Prite:t(indent,top/o,optiune(o),-B,-,E')) c#enar(indent,top)) info(4actuale4)) S#o0Mouse()) 2 void close(void) * NestrictMouse(-, -, E', &<, ')) e+it(')) 2 void meniu(void) * int opt,-,indent,&<,top,F) c#ar c) te+t ackground(')) clrscr()) 3setcursort.pe(3@5KTNS5N)) Prite:t(indent,top/-,optiune(-),-B,-,E')) for (i,&)i",C)i//) Prite:t(indent,top/i,optiune(i),E,',E')) c#enar(indent,top)) info(4implicite4)) 6nitMouse(1Mouse, 1Guttons)) Hra0 , -) NestrictMouse(indent, top/-,indent/AA, top / C, ')) S#o0Mouse()) do * NeadMouse(')) if (k #it();,') * c,getc#()) s0itc#(c)* case ':c,getc#()) s0itc#(c)*

310.
A--. A-&. A-A. A-B. A-<. A-C. A-D. A-E.

319.
A&'. A&-. A&&. A&A.

324. 325.
A&C. A&D. A&E. A&F.

330.
AA-. AA&. AAA. AAB.

335. 336.
AAD.

338.
AAF.

340.
AB-.

342. 343.
ABB.

345.
case D&:Prite:t(indent,top/opt,optiune(opt),E,',E')) opt--) 347. if (opt,,') opt,C) ABE. Prite:t(indent,top/opt,optiune(opt),-B,-,E')) ABF. reak) ABC.

350.
case E':Prite:t(indent,top/opt,optiune(opt),E,',E')) opt//) 352. if (opt,,D) opt,-) A<A. Prite:t(indent,top/opt,optiune(opt),-B,-,E')) A<B. 2) reak) 355. case -A:s0itc# (opt)* A<-.

356.
case -:citire(a))Nestore36mage(indent,top,opt)) reak) 357. case &:metoda3sort,aleg3sort()BE)Nestore36mage(indent,top,opt)) reak) 358. case A:metoda,aleg3met()BE)Nestore36mage(indent,top,opt)) reak) 359. case B:Sortare3sir(a,n,metoda3sort))

360.
case <:afisare3sir(a,n))clear())Nestore36mage(indent,top,opt)) r eak) 361. case C:close()) 362. 2) 363. 2 364. 2 365. else * 366. if (MouseG,,-) * ACD. i,Oet5pt(top)) 368. if (i;,opt) * ACF. Prite:t(indent,top/opt,optiune(opt),E,',E')) AD'. opt,i) AD-. Prite:t(indent,top/opt,optiune(opt),-B,-,E')) AD&. dela.(&'')) 373. 2 374. else s0itc# (opt)*

375.
case -:citire(a))Nestore36mage(indent,top,opt)) reak) case &:metoda3sort,aleg3sort()BE)Nestore36mage(indent,top,opt)) reak) 377. case A:metoda,aleg3met()BE)Nestore36mage(indent,top,opt)) reak) 378. case B:Sortare3sir(a,n,metoda3sort))

376.

379.
case <:afisare3sir(a,n))clear())Nestore36mage(indent,top,opt)) r eak) 380. case C:close()) AE-. 2)

382. 383.
AEB. AE<. AEC. AED.

2 2 20#ile (c;,&D)) 2 void sortare3 ule(long int sir%(, int n) * register int i,j) c#ar gata) do* gata,-) for (i,')i"n)i//) if (sir%i($sir%i/-() * s0ap(1sir%i(,1sir%i/-(,metoda)) gata,') 2 n--) 20#ile (;gata)) 2 void sortare37uick(int i, int s, long int sir%() * long int el) register int st,dr) st,i) dr,s) el,sir%(st/dr)/&() do* 0#ile (sir%st("el) st//) 0#ile (el"sir%dr() dr--) if (st",dr) * if (sir%st(;,sir%dr() s0ap(1sir%st(,1sir%dr(,metoda)) st//) dr--) 2 20#ile (;(dr",st))) if (i " dr) sortare37uick(i,dr,sir)) if (st " s) sortare37uick(st,s,sir)) 2 void sortare3numarare(long int sir%(, int n) * long int s-%<''() register int i,j) int c) for (i,')i",<'')i//) s-%i(,') for (i,')i",n)i//) * c,') for (j,')j",n)j//) if (sir%j("sir%i() c//) 0#ile (s-%c() c//) s-%c(,sir%i()

388. 389. 390.


AF-.

392. 393.
AFB. AF<. AFC. AFD. AFE. AFF. B''. B'-.

402. 403.
B'B. B'<. B'C.

407. 408. 409. 410. 411.


B-&. B-A.

414. 415. 416.


B-D. B-E. B-F. B&'.

421. 422. 423. 424. 425.


B&C.

427. 428. 429.


BA'.

BA-. BA&. BAA. BAB. BA<.

2 for (i,')i",n)i//) sir%i(,s-%i() 2 void sortare3insertie(long int sir%(, int n) * long int s-%<''() register int i,j) int k,au+) c#ar gata) for (i,-)i",n)i//)* au+,sir%i() k,--) j,i--) gata,') 0#ile ((j$,')11(;gata))* if (sir%j($au+)* sir%j/-(,sir%j() j--) 2 else* k,j) gata,-) 2) 2 sir%k/-(,au+) 2 2 void sortare3s#ell(long int sir%(, int n) * int i,#) c#ar gata) #,n) 0#ile (#$-) * #,# / &) do * gata,-) for (i,')i",n-#)i//) * if (sir%i($sir%i/#() * s0ap(1sir%i(,1sir%i/#(,metoda)) gata,') 2 2) 20#ile (;gata)) 2 2 void sortare3intersc#im are(long int sir%(, int n) * register int i,j) for (i,')i",n)i//)

436. 437. 438. 439. 440.


BB-. BB&. BBA. BBB.

445. 446.
BBD. BBE.

449.
B<'. B<-. B<&.

453. 454.
B<<. B<C. B<D. B<E. B<F.

460. 461.
BC&.

463. 464. 465.


BCC.

467. 468.
BCF. BD'.

471. 472. 473.


BDB. BD<. BDC. BDD.

478. 479.

480. 481.
BE&. BEA. BEB. BE<. BEC.

for (j,i/-)j",n)j//) if (sir%i($sir%j() * s0ap(1sir%i(,1sir%j(,metoda)) 2 2 void sortare3s#aker(long int sir%(, int n) * register int j) int k,s,d) s,-) k,n) d,n) do * for (j,d)j$,s)j--) if (sir%j--($sir%j() * s0ap(1sir%j--(,1sir%j(,metoda)) k,j) 2 s,k/-) for (j,s)j",d)j//) if (sir%j--($sir%j() * s0ap(1sir%j--(,1sir%j(,metoda)) k,j) 2 d,k--) 2 0#ile (s",d)) 2 void afisare3sir(long int sir%(, int n) * int i, ,+,.) clear()) goto+.(-,-E)) if (n) for (i,')i"n)i//) printf(4Sd 4,sir%i()) else printf(4@u a fost introdus sirul ;4)) Prite:t(C',&<,4:pasati orice tasta ;4,-<,',E')) getc#()) 2 void Sortare3sir(long int sir%(, int n, int metoda) * s0itc# (metoda) * case -:sortare3 ule(sir,n--)) reak) case &:sortare37uick(',n--,sir)) reak) case A:sortare3numarare(sir,n--)) reak) case B:sortare3insertie(sir,n--)) reak)

487. 488.
BEF. BF'. BF-.

492. 493. 494.


BF<. BFC. BFD. BFE.

499. 500.
<'-. <'&.

503.
<'B. <'<. <'C. <'D. <'E.

509.
<-'. <--.

512. 513. 514. 515.


<-C. <-D. <-E. <-F. <&'.

521. 522.
<&A.

524.
<&<.

526.
<&D.

528.
<&F.

530.
<A-.

532.
<AA.

534.
<A<. <AC. <AD. <AE.

case <:sortare3s#ell(sir,n--)) reak) case C:sortare3intersc#im are(sir,n--)) reak) case D:sortare3s#aker(sir,n--)) 2 2 void s0ap(long int 9v-, long int 9v&, int metoda) * long int au+) s0itc# (metoda)* case -: au+,9v-) 9v-,9v&) 9v&,au+) reak) case &: 9v-,9v-/9v&) 9v&,9v--9v&) 9v-,9v--9v&) 2 2 /* M;ST STI## 5E DO<E === *a,e'ere !*+ de 0 r!are - a0)e-de-!a8 de0)e-de-!a */

539. 540. 541.


<B&. <BA.

544. 545.
<BC. <BD. <BE. <BF. 550. 551. 552. 553. 554.

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