Revision: 46842
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at May 26, 2011 14:36 by josepino
Initial Code
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /* PROGRAMA PRINCIPAL Author: JOSE PINO - SANTIAGO TORTORA Dado un vector de N numeros reales y un numero entero k, determinar el k-esimo mayo elemento. Se generan dos tipos de algoritmos diferentes para comparar sus tiempos de ejecución en un tabla. El algoritmo1 (selección_mayor1) se basa en ordenar por el metodo burbuja los valores de mayor a menor, de este modo los valores mayores quedaran al inicio del arreglo. Luego se ajusta el puntero para que k coincida con la posicion del valor en el arreglo. El algoritmo2 (selección_mayor2) se basa en ajustando el tope al maximo valor asignado. Por ejemplo, si k=1 entonces el mayor de todos es el resultado, si es k es otro valor, se ajusta el tope con el resultado maximo obtenido en el recorrido anterior del arreglo. */ #include <stdio.h> #include <stdlib.h> #include <time.h> //////////////Prototipos//////////////////////////// void cargarArreglo (int *A, int tam); void imprimirKesimos (int *A, int tam, int k); int seleccion_mayor1 (int *A, int k, int n); int seleccion_mayor2 (int *A, int k, int n); //////////////////////////////////////////////////// //////////////////////////////////////////FUNCION PRINCIPAL/////////////////////////////////////////////////////////////////////////// int main () { system ("cls"); int N; int k; int maxValorK = 10; //Cantidad maxima de K para el ejemplo, muestra los top 10 del mayor al menor for (N = 1000; N<=10000; N+=1000) { //Cantidad de elementos del arreglo printf (" N = %d", N); //Imprime en pantalla la cantidad N printf ("\tAlgoritmo 1 \tAlgoritmo 2"); printf("\n----------------------------------------------\n"); int b[N]; //Dimensiona el arreglo para N valores for (k = 1; k<=maxValorK; k++) { //El valor kesimo varia desde 1 a [N] o para el ejemplo hasta [maxValorK] cargarArreglo(b,N); //Funcion que carga el arreglo de tamaño N con valores random printf ("K = %d", k); //Imprime en pantalla la cantidad K actual imprimirKesimos (b, N, k); //Funcion que imprime los kesimos de acuerdo a k y los tiempos respectivos //printf ("Resultado: %d", seleccion_mayor2 (b,k,N)); Muestra los resultados de acuerdo al kesimo mayor elemento printf("\n"); } printf("\n\n"); } system ("PAUSE"); return 0; } /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// /*Funciona primero ordenando el arreglo por el metodo burbuja de mayor a menor y luego con un puntero se ubica en la posición k-esima */ int seleccion_mayor1 (int *A, int k, int n) { int i; int j; int resultado; int aux; //ORDENACION DEL VECTOR POR BURBUJA de mayor a menor for (i = 0; i<n; i++) { for (j = 0; j<n-1; j++) { if (A[j+1] > A[j]) { aux = A[j+1]; A[j+1]=A[j]; A[j]=aux; } } } resultado = (A[k-1]); //El arreglo ya esta ordenado y los mayores se encuentran al inicio, se ajusta el puntero para que k=1 coincida con la posicion 0 del arreglo y asi sucesivamente return (resultado); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// /*Funciona haciendo ejecutando k veces un bucle que ajusta el tope de acuerdo al mayor encontrado en el recorrido previo*/ int seleccion_mayor2 (int *A, int k, int n) { int tope; int mayor; int i; int j; int max; int valorkesimo; mayor = -999999999; tope = 99999999; for (i = 1; i<=k; i++) { //El proceso se hara k veces hasta llegar al k-esimo termino for (j = 0; j< n; j++) { //Recorrido del vector if ( ((A[j]) > mayor) && ((A[j])<tope) ) { //Si el valor en la posicion [i] es mayor al "mayor" y menor al tope, se asigna valorkesimo = A[j]; mayor = A[j]; } } tope = valorkesimo; //Se ajusta el tope al mayor para que el tope de la siguiente pasada sea el valor mayor de la anterior mayor = -9999; } //printf ("\tPrueba respuesta A2: %d", valorkesimo); return (valorkesimo); } //////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// /*Funcion que carga el arreglo con valores aleatorios*/ void cargarArreglo (int *A, int tam) { int i; for (i = 0; i< tam; i++) { A[i] = rand()%11; //Carga el arreglo con valores aleatorios, para la prueba mod11 carga valores desde 0 a 10 } } //////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////// /*Funcion que llama a cada funcion de resolucion, mide el tiempo e imprime los valores medidos*/ void imprimirKesimos (int *A, int tam, int k) { ///// Inicio de medicion de la primera funcion float total1,inicio1, final1; inicio1=clock(); seleccion_mayor1 (A, k, tam); //Llamada a la primera funcion final1=clock(); total1=(final1-inicio1)/(double) CLOCKS_PER_SEC; ///// Fin de medicion de la primera funcion printf (" %f",(total1)); ///// Inicio de medicion de la segunda funcion float total2,inicio2, final2; inicio2=clock(); seleccion_mayor2 (A, k, tam); //Llamada a la segunda funcion final2=clock(); total2=(final2-inicio2)/(double) CLOCKS_PER_SEC; ///// Fin de medicion de la primera funcion printf (" %f", (total2)); printf (" "); } ////////////////////////////////////////////////////////////////////////////////////////////////////
Initial URL
Initial Description
Initial Title
K-Esimo Mayor Elemento - Tiempo de ejecución
Initial Tags
sort
Initial Language
C