Fandom

Scratchpad

PLE:Unidad5Ejercicio21

219,328pages on
this wiki
Add New Page
Discuss this page0 Share
/*
Programa:         Unidad5Ejercicio21.cpp
Descripción:      Comparativa de métodos de ordenación.

*/
#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

const int MAX = 40000;

// Genera los arrays para las pruebas
void generaAleatorio(int array[]);
void generaOrdenado(int array[]);
void generaDesordenado(int array[]);

// Imprime el array
void muestra(int array[]);

// Métodos de ordenación
void ordenaBurbuja(int array[]);
void ordenaSeleccion(int array[]);
void ordenaInsercion(int array[]);
void ordenaRapido(int array[], int inf, int sup);

void main()
{
      int num[MAX], i, n, pos;
      clock_t tiempo1, tiempo2;
      double numSecAOMet1, numSecADMet1, numSecAAMet1;
      double numSecAOMet2, numSecADMet2, numSecAAMet2;
      double numSecAOMet3, numSecADMet3, numSecAAMet3;
      double numSecAOMet4, numSecADMet4, numSecAAMet4;

      randomize();
      //
      // METODO 1 BURBUJA
      //

      cout << "Metodo 1 ....";
      // Generamos array ordenado
      generaOrdenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaBurbuja(num);
      tiempo2 = clock();
      numSecAOMet1 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array desordenado
      generaDesordenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaBurbuja(num);
      tiempo2 = clock();
      numSecADMet1 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array aleatorio
      generaAleatorio(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaBurbuja(num);
      tiempo2 = clock();
      numSecAAMet1 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;


      //
      // METODO 2 SELECCIÓN
      //

      cout << endl << "Metodo 2 ....";
      // Generamos array ordenado
      generaOrdenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaSeleccion(num);
      tiempo2 = clock();
      numSecAOMet2 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array desordenado
      generaDesordenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaSeleccion(num);
      tiempo2 = clock();
      numSecADMet2 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array aleatorio
      generaAleatorio(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaSeleccion(num);
      tiempo2 = clock();
      numSecAAMet2 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;


      //
      // METODO 3 INSERCIÓN
      //

      cout << endl << "Metodo 3 ....";
      // Generamos array ordenado
      generaOrdenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaInsercion(num);
      tiempo2 = clock();
      numSecAOMet3 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array desordenado
      generaDesordenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaInsercion(num);
      tiempo2 = clock();
      numSecADMet3 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array aleatorio
      generaAleatorio(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaInsercion(num);
      tiempo2 = clock();
      numSecAAMet3 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      //
      // METODO 4 RAPIDO (QUICK)
      //

      cout << endl << "Metodo 4 ....";
      // Generamos array ordenado
      generaOrdenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaRapido(num,0,MAX-1);
      tiempo2 = clock();
      numSecAOMet4 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array desordenado
      generaDesordenado(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaRapido(num,0,MAX-1);
      tiempo2 = clock();
      numSecADMet4 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      // Generamos array aleatorio
      generaAleatorio(num);

      // ordeno el array
      tiempo1 = clock();
      ordenaRapido(num,0,MAX-1);
      tiempo2 = clock();
      numSecAAMet4 = (tiempo2 - tiempo1)/(double)CLOCKS_PER_SEC;

      //
      // MOSTRAMOS RESULTADOS EN PANTALLA
      //
      cout << endl;
      cout << "Metodo\tOrden.\tDesorden.\tAleatorio" << endl;
      cout << "Burbuja  \t" << numSecAOMet1 << '\t' << numSecADMet1 << '\t' << numSecAAMet1 << endl;
      cout << "Seleccion\t" << numSecAOMet2 << '\t' << numSecADMet2 << '\t' << numSecAAMet2 << endl;
      cout << "Insercion\t" << numSecAOMet3 << '\t' << numSecADMet3 << '\t' << numSecAAMet3 << endl;
      cout << "Rapido   \t" << numSecAOMet4 << '\t' << numSecADMet4 << '\t' << numSecAAMet4 << endl;

      cin.ignore();
      cin.get();
}

void generaAleatorio(int array[])
{
      // Asignamos valores aleatorios
      for(int i = 0; i < MAX; i++)
            array[i] = rand();
}

void generaOrdenado(int array[])
{
      // Asignamos valores ordenados ascendentemente
      for(int i = 0; i < MAX; i++)
            array[i] = i;
}

void generaDesordenado(int array[])
{
      // Asignamos valores ordenados ascendentemente
      for(int i = 0; i < MAX; i++)
            array[i] = MAX-i;
}

void muestra(int array[])
{
      int i;
      for(i = 0; i < MAX; i++)
            cout << array[i] << '\t';
}

void ordenaSeleccion(int array[])
{
      int i, j, k, aux;
      for (i = 0; i < MAX-1; i++)
      {
                k = i;
      	        aux = array[i];
	        for (j = i+1; j <= MAX-1; j++)
      	        {
	      	        if (array[j] < aux)
		        {
			      k = j;
                              aux = array[j];
        	      	}
      	        }
	        array[k] = array[i];
              	array[i] = aux;
      }
}


void ordenaBurbuja(int array[])
{
      int i, j, aux;
      for(i=0; i < MAX; i++)
      {
	        for(j = 1 ;j < MAX - i; j++)
        	{
	      	        if(array[j-1] > array[j])
		        {
			        aux = array[j];
      			        array[j] = array[j-1];
	      		        array[j-1] = aux;
		        }
      	        }
      }
}

void ordenaInsercion(int array[])
{
      int i, j, aux;
      for (i=1; i <= MAX-1; i++)
      {
	        aux = array[i];
              	j = i-1;
	        while (array[j] > aux && j >= 0)
      	        {
	      	        array[j+1] = array[j];
		        j = j-1;
      	        }
	        array[j+1]= aux;
      }
}

void ordenaRapido(int array[], int inf, int sup)
{
        int elem_div = array[sup];
        int temp;
        int i = inf - 1, j = sup;
        int cont = 1;

        if(inf >= sup)     /* Se cruzaron los índices */
                return;

        while(cont)
        {
                while (array[++i] < elem_div);
                while (array[--j] > elem_div);
                if (i < j)
                {
                        temp = array[i];
                        array[i] = arr<ay[j];
                        array[j] = temp;
                }
                else
                        cont = 0;
        }

        /* Dejamos el elemento de división en su posición final */
        temp = array[i];
        array[i] = array[sup];
        array[sup] = temp;

        /* Aplicamos recursivamente a los subarrays generados */
        ordenaRapido(array, inf, i - 1);
        ordenaRapido(array, i + 1, sup);
}

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Also on Fandom

Random wikia