/* Ejemplos de FUNCIONES sobre tablas: - Rellenar - Mostrar - Ordenar - Busqueda secuencial - Busqueda dicotómica o binaria TODAS las funciones reciben como parámetro Nelementos, donde se guarda el tamaño de la tabla */ #include #define N 10 // Tamaño de la tabla // Ordenación por el método de la Burbuja ( Intercambio directo) con indicador void Ordenar (int talma[], int Nelementos) { int aux; int i; int j; int cambio = 1; i=0; while ( cambio ) { cambio = 0; for (j=0; j talma[j+1]) { aux=talma[j]; talma[j]= talma[j+1]; talma[j+1]= aux; cambio = 1; } } i++; } } // Rellena una tabla con Nelementos void Rellenar (int talma[], int Nelementos) { int i; for (i=0;i< Nelementos ;i++) { printf("Introduzca el numero %d:",i+1); scanf("%d",& talma[i]); } } //Muestra una tabla con Nelemenos void Mostrar (int talma [], int Nelementos) { int i; for (i=0;i< Nelementos;i++) { printf(">%2d = %3d \n",i+1, talma[i]); } } /* Busqueda secuencial devuelve : -1 sin no lo encuentra, o la posición 0 - (N-1) */ int BuscarSecuencial ( int talma[], int valor, int Nelementos ) { int i; int resu; resu = -1; for ( i= 0; i < Nelementos; i++ ) { if ( valor == talma[i] ) { resu = i; break; } } return resu; } /* Busqueda dicotomica devuelve : -1 sin no lo encuentra, o la posición 0 - (N-1) */ int BuscarBinaria ( int almacen[], int dato, int Nelementos ) { int encontrado=0; int izq = 0; int der = Nelementos-1; int resu = -1; int medio; while ((encontrado==0)&&(izq<=der)) { medio=(izq+der)/2; if (almacen[medio]==dato) { encontrado=1; } else { if (almacen[medio]>dato) { der=medio-1; } else { izq=medio+1; } } } if ( encontrado ) { resu = medio; /* Guarda la posición */ } return resu; } void main() { int datos[N]; int pos, valor; Rellenar(datos,N); Ordenar(datos,N); Mostrar(datos,N); printf("Introduzca un valor :"); scanf("%d",& valor ); puts("BUSQUEDA SECUENCIA"); pos = BuscarSecuencial(datos,valor,N); if ( pos == -1) { printf(" El valor no se ha encontrado \n"); } else { printf(" El valor se encuentra en la posición %d \n", pos+1 ); } puts("BUSQUEDA BINARIA"); pos = BuscarBinaria(datos,valor,N); if ( pos == -1) { printf(" El valor no se ha encontrado \n"); } else { printf(" El valor se encuentra en la posición %d \n", pos +1 ); } getchar(); getchar(); }