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

busqueda binaria o dicotomica en c

Estas en el tema de busqueda binaria o dicotomica en c en el foro de C/C++ en Foros del Web. Hola,chicos tengo muxas dudas con respecto a la busqueda binaria o dicotomica en un vector... si me podeis hechar una ayudadita muchas gracias. el ejercicio ...
  #1 (permalink)  
Antiguo 01/04/2010, 10:42
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
busqueda binaria o dicotomica en c

Hola,chicos tengo muxas dudas con respecto a la busqueda binaria o dicotomica en un vector... si me podeis hechar una ayudadita muchas gracias.
el ejercicio es el siguiente:

Código C:
Ver original
  1. /*Se cargará aleatoriamente un vector numérico entero de 22 elementos con valores
  2.  positivos en orden ascendente. Pedir por teclado el valor a buscar en el vector y
  3.  realizar una búsqueda dicotómica. Antes de finalizar se visualizará el vector y si
  4.   el elemento se encontró la posición que ocupa y en caso contrario
  5.  se visualizará mediante un mensaje adecuado que el elemento no se encontró en el
  6.   vector.*/
  7.  
  8.   #include<stdio.h>
  9.   #include<time.h>
  10.   #include<stdlib.h>
  11.  
  12.   int main(){
  13.  
  14.   int i=0,vect[22],j,aux,valor,izq,drcha,centro;
  15.   char basura;
  16.     /*generacion de vector aleatorio*/
  17.   printf("\n******Vector generado aleatoriamente******:\n");
  18.   srand(time(NULL));
  19.   for(i=0;i<22;i++){
  20.           vect[i]=rand()%100;
  21.  
  22.     }
  23.     /*ordenamiento por el metodo de la burbuja*/
  24.   for(i=0;i<22;i++){
  25.     for(j=i+1;j<22;j++){
  26.  
  27.     if(vect[j]<vect[i]){
  28.  
  29.     aux=vect[j];
  30.     vect[j]=vect[i];
  31.     vect[i]=aux;
  32.     }
  33.     }
  34.     }
  35.  
  36.  
  37.  for(i=0;i<22;i++){
  38.  printf("\nlos valores del vector en la posicion %d \t -----> \t %d\n",i,vect[i]);
  39.  
  40.   }
  41.   /*busqueda dicotomica*/
  42.  
  43.     printf("Introducir el valor a buscar en el vector:\n");
  44.     scanf("%d",&valor);
  45.  
  46.  
  47.     izq=0;
  48.     drcha=21;
  49.  
  50. while(drcha<=izq){
  51.  
  52. centro=drcha+izq/2;
  53.     if(vect[centro]==valor){
  54.     return centro;
  55.     }
  56.     else{
  57.         if(valor <vect[centro]){
  58.         izq=centro-1;
  59.         }
  60.         else{
  61.         drcha=centro+1;
  62.         }
  63.         }
  64.         }
  65.   if(vect[i]==valor){
  66.  printf("El valor %d indicado se encontro en la  posicion %d\n",valor,i);
  67.         }
  68.         else{
  69.      printf("El valor %d no se encontro en el vector\n",valor);
  70.         }
  71.  
  72.   printf("Pulsa un tecla para finalizar:\n");
  73.   scanf("%c",&basura);
  74.     return 0;
  75.   }

si me podeis explicar un pokito mas este tipo de busqueda me ayudariais un monton.Salu2
  #2 (permalink)  
Antiguo 01/04/2010, 11:13
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: busqueda binaria o dicotomica en c

http://www.youtube.com/results?searc...a+binaria&aq=f
  #3 (permalink)  
Antiguo 01/04/2010, 13:22
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
Respuesta: busqueda binaria o dicotomica en c

Hola gracias por el enlace,ya entiendo el metodo busqueda pero no me ejecuta bien la busqueda...

mi codigo actual es el siguiente,si veis el error por fa decirmelo thanks.

Código C:
Ver original
  1. #include<stdio.h>
  2.   #include<time.h>
  3.   #include<stdlib.h>
  4.  
  5.   int main(){
  6.  
  7.   int i=0,vect[22],j,aux,valor,drcha,izq,centro;
  8.   char basura;
  9.     /*generacion de vector aleatorio*/
  10.   printf("\n******Vector generado aleatoriamente******:\n");
  11.   srand(time(NULL));
  12.   for(i=0;i<22;i++){
  13.           vect[i]=rand()&#37;100;
  14.  
  15.     }
  16.     /*ordenamiento por el metodo de la burbuja*/
  17.   for(i=0;i<22;i++){
  18.     for(j=i+1;j<22;j++){
  19.  
  20.     if(vect[j]<vect[i]){
  21.  
  22.     aux=vect[j];
  23.     vect[j]=vect[i];
  24.     vect[i]=aux;
  25.     }
  26.     }
  27.     }
  28.  
  29.  
  30.  for(i=0;i<22;i++){
  31.  printf("\nlos valores del vector en la posicion %d \t -----> \t %d\n",i,vect[i]);
  32.  
  33.   }
  34.   /*busqueda dicotomica*/
  35.      printf("Introduce el valor a buscar en el vector\n:");
  36.      scanf("%d",&valor);
  37.     izq=0;
  38.     drcha=21;
  39.     while(valor<=drcha){
  40.     centro=(izq+drcha)/2;
  41.     if(valor>vect[centro]){
  42.     izq=centro+1;
  43.     }
  44.     else if(valor<vect[centro]){
  45.     drcha=centro-1;
  46.     }else return centro;
  47.  
  48.     }
  49.  
  50.      if(valor==centro){
  51.      printf("El valor %d indicado se encontro en la  posicion %d\n",valor,i);
  52.      }
  53.      else{
  54.      printf("El valor %d no se encontro en el vector\n",valor);
  55.      }
  56.  
  57.   printf("Pulsa un tecla para finalizar:\n");
  58.   scanf("%c",&basura);
  59.     return 0;
  60.   }
  #4 (permalink)  
Antiguo 01/04/2010, 13:43
Avatar de newboy_master  
Fecha de Ingreso: enero-2008
Ubicación: Granada
Mensajes: 882
Antigüedad: 16 años, 3 meses
Puntos: 46
Respuesta: busqueda binaria o dicotomica en c

Te dejo uno que tengo de clase y funciona, luego lo adaptas a tu código si quieres:

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <conio.h>
  4. main()
  5. {
  6.       int vector[10],i,j,aux,izq,der,cen,valor;
  7.      
  8.       for(i=0;i<10;i++){
  9.                         printf("Introduce un numero: ");
  10.                         scanf("%d",&vector[i]);
  11.                         }
  12.       for(i=0;i<10;i++){
  13.                         for(j=0;j<(10-i);j++){
  14.                                           if(vector[j]>vector[j+1]){
  15.                                                                    aux=vector[j];
  16.                                                                    vector[j]=vector[j+1];
  17.                                                                    vector[j+1]=aux;
  18.                                                                    }
  19.                                          
  20.                        
  21.                                           }
  22.                         }
  23.       printf("el vector ordenado de menor a mayor queda asi: ");                  
  24.       for(i=0;i<10;i++)
  25.       printf(" %d ",vector[i]);
  26.      
  27.       printf("\nNumero que queremos buscar: ");
  28.       scanf("%d",&valor);
  29.      
  30.       izq=0;
  31.       der=9;
  32.       cen=(9+1)/2;
  33.       while(vector[cen] != valor && izq<der){
  34.                                                if (vector[cen]>valor){
  35.                                                                       der=cen-1;
  36.                                                                       }
  37.                                                else izq=cen+1;
  38.                                                
  39.                                                cen=(izq+der)/2;
  40.                                                }
  41.       if(vector[cen]==valor)
  42.       printf("Encontrado en la posicion %d",cen+1);
  43.       else printf("No encontrado");
  44.      
  45.      
  46.      
  47.       getche();
  48. }
__________________
@jslirola - Programador Web Freelance.
  #5 (permalink)  
Antiguo 01/04/2010, 17:31
 
Fecha de Ingreso: marzo-2010
Mensajes: 127
Antigüedad: 14 años, 1 mes
Puntos: 2
De acuerdo Respuesta: busqueda binaria o dicotomica en c

Hola gracias por el codigo lo repase y vi las diferencias unas casi nada pero el while es muy importante,lo unico que no lo vi bien fue el final

en la parte del codigo que indicas:
Código C:
Ver original
  1. printf("Encontrado en la posicion %d",cen+1);
  2. {

como al visualizar el vector yo visualizo tmb la posicion es decir el valor de "i" y comprobe de que poniendo cen+1 te visualiza el valor de i mas 1.
kitando el +1 ya se ejecuta correctamente.

Muchisiiiiimas graciasss

Etiquetas: busquedas
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 13:42.