Fandom

Scratchpad

PLE:Unidad5Ejercicio21

216,185pages on
this wiki
Add New Page
Discuss this page0 Share

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.

/*
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);
}

Also on Fandom

Random wikia