Você está na página 1de 3

void sort_s() {el min; int p; c=0;s=0; for(int i=1;i<n-1;i++) {min=t[i];p=i; delay(2); for(int j=i+1;j<n;j++) {delay(2); if(t[j]<min){min=t[j];p=j;c++;}else{c++;} } if(t[i]>min)

{t[p]=t[i];t[i]=min;c++;s++;}else{c++;} } cout<<"Nr de schimbari "<<s<<"\nNr de comparari "<<c<<endl; //timpul mediu de sortare n(n-1)/2 } void sort_i() {int i,j; c=0;s=0; el v; for(i=2;i<n;i++) {v=t[i];j=i; delay(2); while(t[j-1]>v) {s++,c++;t[j]=t[j-1];j--;delay(2);} t[j]=v;c++; } cout<<"Nr de schimbari "<<s<<"\nNr de comparari "<<c<<endl; //timpul mediu de sortare n(n-1)/2 } void sort_q(int st,int dr) { int i,j; el v,l; if( dr>st ) {c++; v=t[dr]; i=st-1; j=dr; for( ; ; ) { delay(2); while ( t[++i]<v ){c++;}; while( t[--j]>v ){c++;}; if(i>=j) break; l=t[i]; t[i]=t[j]; t[j]=l;c++;s++; } l=t[i];t[i]=t[dr]; t[dr]=l;s++; sort_q(st,i-1); sort_q(i+1,dr); } } void sort_sh() { int i, j, h; s=0;c=0; el v; for (h = 1; h <n/9; h = 3*h+1); for ( ; h > 0; h /= 3 ) for (i = h+1; i < n; i++) { delay(2); v = t[i]; j = i; while ( j>h && t[j-h]>v )

{delay(2); t[j] = t[j-h]; j-=h;c++;s++; } t[j] = v;c++; } cout<<"Nr de schimbari "<<s<<"\nNr de comparari "<<c<<endl; } void arbore (int i, int n) { el v = t[i]; int tata=i; //tata indica pozitia pe care va fi plasata valoarea v int fiu=2*i; //fiul stang while (fiu<=n) {delay(2);if (fiu<n) //exista fiu drept if (t[fiu]<t[fiu+1]) {fiu++;c++;} //fiu indica fiul cu valoarea cea mai mare if (v<t[fiu]) {t[tata]=t[fiu]; // valoarea celui mai mare dintre fii urca in arbore tata=fiu; //v coboara in arbore fiu=fiu*2; c++;s++; } else fiu=n+1; //am determinat pozitia corecta pentru v } t[tata]= v;} void CreareArbore() //organizeaza ca heap vectorul global H {for (int i=n/2; i; i--) arbore(i,n);} void sort_a() { el aux; CreareArbore(); for (int i=n; i>1; i--) //plaseaza corect un element pe pozitia i {delay(2); aux=t[1]; t[1]=t[i]; t[i]=aux; s++;//interschimba elementul t[i] cu t [1] arbore(1, i-1); } //restaureaza heap-ul for(i=1;i<n;i++) t[i]=t[i+1]; } void sort(char *fn) { el aux; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) if(t[i]>t[j]) {aux=t[i]; t[i]=t[j]; t[j]=aux;} cout<<"Sortarea selectiva sa efectuat"; FILE *pf; pf=fopen(fn,"w"); for(i=0;i<n;i++) t[i].fs_el(pf); fclose(pf); }

}; void main() {clrscr(); clock_t t1,t2; table<Universitate1>gr("d:\\file1.txt"); int q,k; do { clrscr(); cout <<"1.Afisarea"<< endl; cout <<"2.Sortarea prin selectie"<<endl; cout <<"3.Sordare prin insertie "<<endl; cout <<"4.Sortare rapida"<<endl; cout <<"5.Sortarea shell "<<endl; cout <<"6.Sortarea arborescent "<<endl; cout <<"0.Iesire din program"<<endl; cin >>q; switch(q) { case 1:clrscr();gr.show("","");break; case 2:clrscr();t1=clock();gr.sort_s();t2=clock();cout<<"Complexitatea teoretic "<<gr.n*gr.n<<endl; printf("Timpul necesar este: %f secunde\n", (t2-t1) / CLK_TCK);getch(); break; case 3:clrscr();t1=clock();gr.sort_i();t2=clock();cout<<"Complexitatea teoretic "<<gr.n*gr.n<<endl; printf("Timpul necesar este: %f secunde\n", (t2-t1) / CLK_TCK);getch(); break; case 4:clrscr();gr.s=0;gr.c=0;t1=clock();gr.sort_q(1,an.n-1);t2=clock();cout<<" Nr de schimbari "<<an.s<<"\nNr de comparari "<<an.c<<"\nComplexitatea teoretic " <<an.n*(log(an.n)/log(2))<<endl; printf("Timpul necesar este: %f secunde\n", (t2-t1) / CLK_TCK);getch(); break; case 5:clrscr();t1=clock();gr.sort_sh();t2=clock();cout<<"Complexitatea teoreti c "<<gr.n*(log(gr.n)/log(2))*2<<endl; printf("Timpul necesar este: %f secunde\n", (t2-t1) / CLK_TCK);getch(); break; case 6:clrscr();gr.s=0;gr.c=0;t1=clock();gr.sort_a();t2=clock();cout<<"Nr de sc himbari "<<gr.s<<"\nNr de comparari "<<an.c<<"\nComplexitatea teoretic "<<an.n*2 <<endl; printf("Timpul necesar este: %f secunde\n", (t2-t1) / CLK_TCK);getch(); break; } } while (q!=0); }

Você também pode gostar