/* Binserach - wyszukiwanie binarne */ /* Podstawowe założenie
Transkrypt
/* Binserach - wyszukiwanie binarne */ /* Podstawowe założenie
/* Binserach - wyszukiwanie binarne */ /* Podstawowe załoŜenie: posortowana tablica.*/ /* ZłoŜoność logarytmiczna.*/ #include<stdio.h> #include<stdlib.h> #include<time.h> #include<math.h> #define n 10 /*rozmiar tablicy*/ #define Z 41 /*górna granica zakresu danych w tablicy*/ void wypisz(int [], int ); void zatrzymanie(unsigned int); int bin_search(int [], int , int ); int main(void){ int tab[n]={1,3,5,14,21,24,29,32,36,41}; int x, pom,i; printf("Testowanie funkcji bin_search...\n"); for(i=1;i<=Z;i++){ wypisz(tab,n); pom=bin_search(tab,n,i); zatrzymanie(1); if(pom!=-1) printf("\nElement %d znajduje sie pod indeksem: %d.", i, pom); else printf("\nElementu %d nie ma w tablicy.", i); } fflush(stdin); printf("\n\nAby zakonczyc nacisnij ENTER."); getchar(); return 0; } void wypisz(int tab[], int rozmiar){ int i; printf("\n\nTablica:\n\n"); for(i=0;i<n;i++) printf("%d,",tab[i]); printf("\n"); } void zatrzymanie(unsigned int CZAS){ const int podzial=10; double przyrost, start,stop,p=CZAS/podzial; unsigned int i=0; printf("\n"); start = clock(); while (przyrost<CZAS){ stop = clock(); przyrost = (double)(stop - start) / CLOCKS_PER_SEC; if(floor(podzial*przyrost)>=i){ printf("."); i++; } } printf("\n"); } int bin_search(int tab[], int rozmiar, int el){ enum {nznal,znal} Stan=nznal; int lewy=0, prawy=rozmiar-1, srod; while(lewy<=prawy && !Stan){ srod=(lewy+prawy)/2; if(tab[srod]==el) Stan=znal; else if(tab[srod]<el) lewy =srod+1; else prawy=srod-1; } if(Stan==znal) return srod; else return -1; }