next up previous
Next: Algoritmos para cálculo de Up: Algoritmos. Previous: Algoritmos de ordenación.

Algoritmos de búsqueda en un vector ordenado.

  1. Búsqueda lineal.

    int lineal (int matriz[], int n, int el)
    {
      int i;
    
      for (i=0;i<n;i++)
        if (matriz[i]==el) return i;
      return -1;
    }
    

  2. Búsqueda binaria.

    int binariaNoRecursiva (int matriz[], int n, int el)
    {
      int centro,izqda,drcha,encontrado;
    
      izqda= 0;
      drcha= n-1;
      encontrado= 0;
      
      while (izqda<=drcha && !encontrado) {
        centro=(izqda+drcha)/2;
        if (el==matriz[centro])
          encontrado=1;
        else if (el<matriz[centro])
               drcha=centro-1;
             else izqda=centro+1;
      }
      return encontrado?centro:-1;
    }
    

  3. Búsqueda binaria recursiva.

    int binariaRecursiva (int matriz[], int n, int el)
    {
      int centro,aux;
    
      if (n>0) {
        centro=n/2;
        if (matriz[centro]>el)
          return binariaRecursiva(matriz,centro,el);
        else if (matriz[centro]<el) {
               aux= binariaRecursiva(matriz+centro+1,n-centro-1,el);
               if (aux==-1) return -1;
               else return centro+1+aux;
             }
             else return centro;
      }
      else return -1;
    }
    

  4. Búsqueda binaria recursiva. Segunda versión.

    int binariaRecursiva2 (int matriz[], int n, int el)
    {
      int centro;
    
      if (n>0) {
        centro=n/2;
        if (matriz[centro]>el)
          return binariaRecursiva2(matriz,centro,el);
        else if (matriz[centro]<el) {
               if (binariaRecursiva2(matriz+centro+1,n-centro-1,el)==-1) return -1;
               else return centro+1+binariaRecursiva2(matriz+centro+1,n-centro-1,el);
             }
             else return centro;
      }
      else return -1;
    }
    



J. Fdez-Valdivia 2001-03-09