Busqueda binaria dentro de un arreglo

¿Has encontrado un error? ¿Tienes la solución? Deja tu correción ;-)

Antes de comentar: Gran parte de los ejercicios propuestos no tienen librerías debido a que Wordpress las eliminó al verlas como etiquetas HTML. Si sabes/tienes/conoces las librerías que hacen falta, déjalo en los comentarios. Y lo mas importante: Todos los ejemplos fueron realizados por estudiante con únicamente conocimiento básico del lenguaje, no de programación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
#include <stdio.h>
#define TAMANIO 15
 
/* prototipos de las funciones */
int busquedaBinaria( const int b[], int claveDeBusqueda, int bajo, int alto );void despliegaEncabezado( void );
void despliegaLinea( const int b[], int bajo, int medio, int alto );
 
/* la función main comienza la ejecución del programa */
int main(){
   int a[ TAMANIO ]; /* crea el arreglo a */
   int i; /* contador para inicializar los elementos de 0 a 14 del arreglo a */
   int llave; /* valor a localizar en el arreglo a */
   int resultado; /* variable para almacenar la ubicación de la llave o -1 */ 
   /* crea los datos */
   for ( i = 0; i < TAMANIO; i++ ) {
      a[ i ] = 2 * i;
   } /* fin de for */ 
   printf( "Introduzca un numero entre 0 y 28: " );
   scanf( "%d", &llave );
 
   despliegaEncabezado(); 
   /* busca la llave en el arreglo a */
   resultado = busquedaBinaria( a, llave, 0, TAMANIO - 1 );
 
   /* despliega los resultados */   if ( resultado != -1 ) {
      printf( "n%d se encuentra en el elemento %d del arreglon", llave, resultado );
   } /* fin de if */
   else {
      printf( "n%d no se encuentran", llave );   } /* fin de else */
 
   return 0; /* indica terminación exitosa */
 
} /* fin de main */ 
/* función para realizar la búsqueda binaria en un arreglo */
int busquedaBinaria( const int b[], int claveDeBusqueda, int bajo, int alto )
{
   int central; /* variable para mantener el elemento central del arreglo */ 
   /* realiza el ciclo hasta que el subínice bajo es mayor que el subíndice alto */
   while ( bajo <= alto ) {
 
      /* determina el elemento central del subarreglo en el que se busca */      central = ( bajo + alto ) / 2;
 
      /* despliega el subarreglo utilizado en este ciclo */
      despliegaLinea( b, bajo, central, alto );
       /* si claveDeBusqueda coincide con el elemento central, devuelve central */
      if ( claveDeBusqueda == b[ central ] ) {
         return central;
      } /* fin de if */
       /* si claveDeBusqueda es menor que el elemento central, establece el nuevo valor de alto */
      else if ( claveDeBusqueda < b[ central ] ) {
         alto = central - 1; /* busca en la mitad inferior del arreglosearch low end of array */
      } /* fin de else if */
       /* si claveDeBusqueda es mayor que el elemento central, establece el nuevo valor para bajo */
      else {
         bajo = central + 1; /* busca en la mitad superior del arreglo */
      } /* fin de else */
    } /* fin de while */
 
   return -1;   /* no se encontró claveDeBusqueda */
 
} /* fin de la funcipon busquedaBinaria */ 
/* Imprime un encabezado para la salida */
void despliegaEncabezado( void )
{
   int i; /* contador */ 
   printf( "nSubindices:n" );
 
   /* muestra el encabezado de la columna */
   for ( i = 0; i < TAMANIO; i++ ) {      printf( "%3d ", i );
   } /* fin de for */
 
   printf( "n" ); /* comienza la nueva línea de salida */
    /* muestra una línea de caracteres  - */
   for ( i = 1; i <= 4 * TAMANIO; i++ ) {
      printf( "-" );
   } /* fin de for */
    printf( "n" ); /* inicia una nueva línea de salida */
} /* fin de la función despliegaEncabezado */
 
/* Imprime una línea de salida que muestra la parte actual
   del arreglo que se esta procesando. */void despliegaLinea( const int b[], int baj, int cen, int alt )
{
   int i; /* contador para la iteración a través del arreglo b */
 
   /* ciclo a través del arreglo completo */   for ( i = 0; i < TAMANIO; i++ ) {
 
      /* despliega espacios si se encuentra fuera del rango actual del subarreglo */
      if ( i < baj || i > alt ) {
         printf( "    " );      } /* fin de if */ 
      else if ( i == cen ) { /* despliega el elemento central */
         printf( "%3d*", b[ i ] ); /* marca el valor central */
      } /* fin de else if */
      else { /* despliega otros elementos en el subarreglo */         printf( "%3d ", b[ i ] );
      } /* fin de else */
 
   } /* fin de for */
    printf( "n" ); /* inicia la nueva línea de salida */
} /* fin de la función despliegaLinea */

Punto importante: Si vas a sugerir un segmento de código en algún lenguaje debes hacerlo así:

  • Si es lenguaje C <code lang="c">Código en C</code>
  • Si es lenguaje Pascal <code lang="pascal">Aquí dentro el código de Pascal</code>.

De esta manera el código coloreas el código.

Deja un comentario

Suscribirse a los comentarios.