home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / laboratorio / lab-19-4-99 / ese6.c < prev    next >
C/C++ Source or Header  |  1999-05-10  |  1KB  |  60 lines

  1. /* bin search */
  2.  
  3. #include <stdio.h>
  4.  
  5. #define MAX 100
  6.  
  7. int binsearch(int,int*,int);
  8.  
  9. int main()
  10. {
  11.      int v[MAX];
  12.      int i,n,num;
  13.  
  14.     /* leggo la dimensione del vettore */
  15.  
  16.        printf("fornisci il numero di elementi del  vettore: ");
  17.      scanf("%d",&n);
  18.     
  19.      if (n < 0)
  20.      {
  21.          printf("errore!");
  22.             return -1;
  23.      }
  24.  
  25.      /* leggo il primo vettore */
  26.      
  27.      for (i=0; i < n;i++)
  28.      {    printf("\nfornisci valore %d:  ",i+1);
  29.         scanf("%d",&v[i]);
  30.      }
  31.  
  32.      /* leggo l'elemento da cercare */
  33.  
  34.      printf("\nfornisci il numero da cercare: ");
  35.      scanf("%d",&num);
  36.  
  37.      /*  stampo il risultato della funzione di ricerca */
  38.     
  39.      printf("\n\nil numero cercato e' in posizione %d",binsearch(num,v,n)+1);
  40.      printf("\n(0 significa non c'e')\n\n ");
  41.      return 0;
  42. }
  43.  
  44.  
  45. int binsearch(int x, int v[], int n)
  46. {
  47.   int low = 0, high = n - 1, mid;
  48.   while (low <= high)
  49.   {   
  50.       mid = (low + high) / 2;
  51.       if (x < v[mid])
  52.                   high = mid - 1;
  53.       else if (x > v[mid])
  54.                 low = mid + 1;
  55.       else
  56.             return mid; /* trovato */
  57.     }
  58.    return -1; /* non trovato */
  59. }
  60.