#include <iostream>
#include "Ordenar.h"
using namespace std;
void mostrarVector(Ordenar *obj)
{
cout << "============ ELEMENTOS DEL VECTOR ============" << endl;
for (int i = 0; i < obj->getNumElementos(); i++)
{
cout << "Posicion " << i << ": " << obj->getVectorDatos(i) << endl;
}
}
int main(void)
{
Ordenar *obj = new Ordenar();
int num_elementos;
cout << "Digite el numero de elementos del vector" << endl;
cout << ">> ";
cin >> num_elementos;
obj->setNumElementos(num_elementos);
obj->crearVector();
for(int i = 0; i < obj->getNumElementos(); i++)
{
int dato;
cout << "Digite el elemento de la posicion " << i << endl;
cout << ">> ";
cin >> dato;
obj->setVectorDatos(i, dato);
}
cout << "Vector lleno." << endl;
mostrarVector(obj);
int opcion;
cout << "====== Seleccione el Metodo de Ordenamiento ======" << endl << endl;
cout << "1. Ordenamiento Burbuja" << endl;
cout << "2. Ordenamiento por Intercambio" << endl;
cout << "3. Ordenamiento por Seleccion" << endl;
cout << "4. Ordenamiento por Shell" << endl;
cout << "5. Ordenar por QuickSort" << endl;
cout << ">> ";
cin >> opcion;
switch(opcion)
{
case 1:
obj->ordenarBurbuja();
mostrarVector(obj);
break;
case 2:
obj->ordenarIntercambio();
mostrarVector(obj);
break;
case 3:
obj->ordenarSeleccion();
mostrarVector(obj);
break;
case 4:
obj->ordenarShell();
mostrarVector(obj);
break;
case 5:
obj->ordenarQuickSort(0, obj->getNumElementos()-1);
mostrarVector(obj);
break;
default:
cout << "¡No selecciono una opción valida entre 1 y 5!" << endl;
break;
}
}
#ifndef ORDENAR_H
#define ORDENAR_H
class Ordenar
{
public:
Ordenar();
virtual ~Ordenar();
void crearVector();
void setVectorDatos(int p, int dato);
int getVectorDatos(int p);
void setNumElementos(int num);
int getNumElementos();
void cambiar(int p1, int p2);
void ordenarBurbuja();
void ordenarIntercambio();
int posicionMenor(int inicio);
void ordenarSeleccion();
void ordenarShell();
void ordenarQuickSort(int primero, int ultimo);
protected:
private:
int *vectorDatos;
int numElementos;
};
#endif
#include "Ordenar.h"
#include <iostream>
using namespace std;
Ordenar::Ordenar()
{
vectorDatos = NULL;
numElementos = 0;
}
Ordenar::~Ordenar()
{
}
void Ordenar::crearVector()
{
vectorDatos = new int[numElementos];
}
void Ordenar::setVectorDatos(int p, int dato)
{
vectorDatos[p] = dato;
}
int Ordenar::getVectorDatos(int p)
{
return vectorDatos[p];
}
void Ordenar::setNumElementos(int num)
{
numElementos = num;
}
int Ordenar::getNumElementos()
{
return numElementos;
}
void Ordenar::cambiar(int p1, int p2)
{
int temp;
temp = getVectorDatos(p1);
setVectorDatos(p1, getVectorDatos(p2));
setVectorDatos(p2, temp);
}
void Ordenar::ordenarBurbuja()
{
for (int i = 0; i < getNumElementos(); i++)
{
for (int j = 0; j < getNumElementos()-2; j++)
{
if (getVectorDatos(j) > getVectorDatos(j+1))
{
cambiar(j, j+1);
}
}
}
}
void Ordenar::ordenarIntercambio()
{
for (int i = 0; i < getNumElementos(); i++)
{
for (int j = i+1; j < getNumElementos(); j++)
{
if (getVectorDatos(i) > getVectorDatos(j))
{
cambiar(i, j);
}
}
}
}
int Ordenar::posicionMenor(int inicio)
{
int posMenor;
int menorElemento;
posMenor = inicio;
menorElemento = getVectorDatos(inicio);
for (int i = inicio+1; i < getNumElementos(); i++)
{
if (getVectorDatos(i) < menorElemento)
{
menorElemento = getVectorDatos(i);
posMenor = i;
}
}
return posMenor;
}
void Ordenar::ordenarSeleccion()
{
for (int i = 0; i < getNumElementos(); i++)
{
cambiar(i, posicionMenor(i));
}
}
void Ordenar::ordenarShell()
{
int n, cont;
n = (getNumElementos()-1)/2;
while (n != 0)
{
cont = 1;
while (cont != 0)
{
cont = 0;
for(int i = n; i < getNumElementos(); i++)
{
if(getVectorDatos(i-n) > getVectorDatos(i))
{
cambiar(i, i-n);
cont = cont + 1;
}
}
}
n = n/2;
}
}
void Ordenar::ordenarQuickSort(int primero, int ultimo)
{
int i, j, centro;
int pivote;
centro = (primero + ultimo)/2;
pivote = getVectorDatos(centro);
i = primero;
j = ultimo;
do
{
while ((i <= j) && (getVectorDatos(i) < pivote))
{
i = i + 1;
}
while((i <= j) && (getVectorDatos(j) > pivote))
{
j = j - 1;
}
if(i <= j)
{
cambiar(i, j);
i = i + 1;
j = j - 1;
}
}
while (i <= j);
if(primero < j)
{
ordenarQuickSort(primero, j);
}
if(i < ultimo)
{
ordenarQuickSort(i, ultimo);
}
}