Foros del Web » Programación para mayores de 30 ;) » C/C++ »

programacion en c , busqueda binaria en un array

Estas en el tema de programacion en c , busqueda binaria en un array en el foro de C/C++ en Foros del Web. ya estoy harto de este ejercicio y no se porque no funca les dejo. lo que hay que hacer es buscar el valor de la ...
  #1 (permalink)  
Antiguo 28/08/2013, 19:27
 
Fecha de Ingreso: septiembre-2010
Mensajes: 101
Antigüedad: 14 años, 2 meses
Puntos: 0
programacion en c , busqueda binaria en un array

ya estoy harto de este ejercicio y no se porque no funca

les dejo. lo que hay que hacer es buscar el valor de la variable clave en el vector dado

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <Windows.h>
  4. void miFuncion(int clav, int vcentro, int valori,int  valorf , int v[8]);
  5. int main()
  6. {
  7.     int miVector[8]= {1, 2, 3 , 4, 6, 8, 9 , 10};
  8.     int valorFinal = 8;
  9.     int valorInicial = 0;
  10.     int valorCentro = (valorFinal - valorInicial)/2;
  11.     int clave = 1;
  12.    
  13.     miFuncion(clave , valorCentro ,valorInicial ,valorFinal , miVector);
  14.     system("pause");
  15.     return 0;
  16. }
  17.  
  18. void miFuncion(int clav, int vcentro, int valori,int  valorf , int v[]){
  19.     int i = 0;
  20.     for (i ; i <= valorf ; i++)
  21.     {
  22.             if(v[vcentro] == clav)
  23.             {          
  24.                 printf("el valor esta en la posicion : %d  -- y es el valor %d --", vcentro ,clav);
  25.        
  26.             }
  27.        
  28.             if(vcentro > clav)
  29.             {
  30.                 valori = valori ;
  31.                 valorf = vcentro;
  32.                 vcentro = (valorf- valori)/2;
  33.        
  34.             }
  35.              if(v[vcentro] <clav)
  36.             {
  37.                 valori = vcentro ;
  38.                 valorf = valorf;
  39.  
  40.                 vcentro = (valorf- valori)/2;
  41.             }
  42.  
  43.        
  44.     }
  45.  
  46. }



si le echan un ojo se los agradeceria, ya que me marie tanto que no se ni que hago
  #2 (permalink)  
Antiguo 28/08/2013, 20:50
 
Fecha de Ingreso: diciembre-2011
Ubicación: Crespo - Entre Rios
Mensajes: 155
Antigüedad: 12 años, 11 meses
Puntos: 25
Respuesta: programacion en c , busqueda binaria en un array

de momento lo que pude ver es, que si ValorCentro es el valor ubicado en el medio del vector, esta mal calculado:

ValorCentro= (ValorInicial + ValorFinal)/2
  #3 (permalink)  
Antiguo 29/08/2013, 11:17
 
Fecha de Ingreso: julio-2012
Mensajes: 133
Antigüedad: 12 años, 4 meses
Puntos: 22
Respuesta: programacion en c , busqueda binaria en un array

Hola eke_ps.

Creo que podes simplificar la función de búsqueda:
Código C:
Ver original
  1. int binaria(int buscado, int *arreglo, int hasta)
  2. {
  3.   int desde = 0, medio;
  4.   --hasta;
  5.   while(desde <= hasta) {
  6.     medio = (hasta+desde) >> 1;
  7.     if (buscado == arreglo[medio]) return medio; // (*)
  8.     if (buscado < arreglo[medio])
  9.       hasta = medio-1;
  10.     else
  11.       desde = medio+1;
  12.   }
  13.   return NOT_FOUND;
  14. }
(*) Tomando que el primer elemento está en posición [0], de otro modo: return medio+1;

Ejemplo de uso:
Código C:
Ver original
  1. ...
  2. #define ELEM 15
  3. #define NOT_FOUND -1
  4.  
  5. int binaria(int, int *, int);
  6.  
  7. int main()
  8. {
  9.   int numeros[ELEM] = {0,1,7,9,10,12,15,20,32,35,38,42,53,70,90};
  10.   int x = binaria(11, numeros, ELEM);
  11.  
  12.   if (x == NOT_FOUND)
  13.     printf("No encontrado");
  14.   else
  15.     printf("%d esta en la posicion %d",numeros[x], x);
  16. ...

Saludos.

Etiquetas: busqueda, ejercicio, funcion, int, programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:42.