Guest User

Cwiczenie 12

a guest
Dec 4th, 2011
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.09 KB | None | 0 0
  1. /* Cwiczenie 12 */
  2.  
  3. #include <stdio.h>
  4. #include <assert.h>
  5.  
  6. typedef unsigned int uint;
  7.  
  8. void szukajBinarnie(uint posortowana[], uint rozmiar, uint szukana) {
  9.     /* ************* Algorytm poszukiwania binarnego *************  */
  10.     /* Mamy posortowana tablice. Aby szukac w niej wartosci mozemy  */
  11.     /* zastosowac nastepujaca procedure:                            */
  12.     /*   1. Porownujemy szukana wartosc z elementem srodkowym       */
  13.     /*      tablicy. Jezeli szukana jest mniejsza niz element, to   */
  14.     /*      wiemy, ze nie znajdziemy szukanej w prawej czesci       */
  15.     /*      tablicy. 'Idziemy' wiec w lewo.                         */
  16.     /*   2. Podobnie, jezeli szukana jest wieksza niz element, to   */
  17.     /*      'idziemy' w prawo.                                      */
  18.     /*   3. W koncu, jezeli szukana jest rowna elementowi, to       */
  19.     /*      znalezlismy poszukiwana wartosc!                        */
  20.     /* Postepujac w ten sposob zawsze odnajdziemy szukana wartosc   */
  21.     /* pod warunkiem, ze jest w tablicy. Jezeli wartosci nie ma     */
  22.     /* w tablicy, to mozemy to wykryc badajac indeks poczatku i     */
  23.     /* konca. Jezeli poczatek > koniec to nie ma juz gdzie szukac   */
  24.     /* Zatem wartosci nie ma w tablicy.                             */
  25.     /* ************************************************************ */
  26.    
  27.     uint poczatek = 0;          /* indeks poczatku */
  28.     uint koniec   = rozmiar-1;  /* indeks konca    */
  29.     uint srodek;                /* indeks srodka   */
  30.    
  31.    
  32.    
  33.     assert(rozmiar > 0);
  34.    
  35.     while ( !(poczatek > koniec) ) {
  36.         srodek = (koniec+poczatek)/2;
  37.         if (szukana < posortowana[srodek])
  38.             koniec = srodek-1;    /* idziemy na lewo  */
  39.         else if (szukana > posortowana[srodek])
  40.             poczatek = srodek+1;  /* idziemy na prawo */
  41.         else {
  42.             printf("Znaleziono %u na miejscu %u!!!1\n", szukana, srodek);
  43.             return; /* Wychodzimy z funkcji */
  44.         }
  45.     }
  46.    
  47.     printf("Nie znaleziono %u w tablicy. :(\n", szukana);
  48. }
  49.  
  50. int main(int argc, char* argv[]) {
  51.     uint tab[] = {1,3,4,5,6,7,9,11};
  52.     uint rozmiar = sizeof(tab)/sizeof(*tab);
  53.    
  54.     szukajBinarnie(tab, rozmiar, 3);
  55.    
  56.     return 0;
  57. }
  58.  
  59.  
Advertisement
Add Comment
Please, Sign In to add comment