Está en la página 1de 6

#include<iostream>

#include<conio.h>
#include<time.h>
#define max 280000
using namespace std;

void Leer(int n,int A[max])


{
for(int i=0;i<n;i++)
{

A[i]=rand()%n;
}
}

void burbujainv (int A[max],int n)


{
int B;
for (int i=0;i<=n;i++)
for(int j=0;j<=n;j++)//recorre hasta i-1
if (A[j]<A[j+1])//si donde esta i es menor que el anterior//cambio todo
{
B=A[j];//se almacena en auxiliar
A[j]=A[j+1];//se intercambia
A[j+1]=B;//se chanca por el nuevo
}
}

void Quickinv(int primero,int ultimo, int A[max])


{
int i=primero;
int j=ultimo;
float central=A[(primero+ultimo)/2];
int temp;
do
{
while(central<A[i])i++;//cambio
while(central>A[j])j--;//cambio
if(i<=j)
{
temp=A[i];
A[i]=A[j];
A[j]=temp;
i++;
j--;
}
}while(i<=j);
if(primero<j)Quickinv(primero,j,A);
if(ultimo>i)Quickinv(i,ultimo,A);
}

void reconstruirHeap(int A[max],int n,int i)


{
int hijoizq,hijoder,j,aux;
if(i<n/2)
{
hijoizq=2*i+1;
hijoder=2*i+2;
j=hijoizq;
if((hijoder<n)&&(A[j]>A[hijoder]))/*cambiar 2do < x >*/
{j=hijoder;}
if(A[j]<A[i])/*cambiar x <*/
{
aux=A[i];
A[i]=A[j];
A[j]=aux;
reconstruirHeap(A,n,j);
}
}
}

void construirHeap(int A[max],int n)


{
int i;
for(i=(n/2)-1;i>=0;i--)
{reconstruirHeap(A,n,i);}
}

void heapSortinv(int A[max],int n)


{
int ultimo,x;
construirHeap(A,n);
ultimo=n-1;
while(ultimo>0)
{
x=A[0];
A[0]=A[ultimo];
A[ultimo]=x;
reconstruirHeap(A,ultimo,0);
ultimo=ultimo-1;
}
}

void insertarinv(int n,int A[max])


{int i,j,aux;
for(i=1;i<n;i++) // i contiene el nmero de elementos de la sublista.
{
// Se intenta aadir el elemento i.
aux=A[i];
for(j=i-1;j>=0;j--) // Se recorre la sublista de atrs a adelante para buscar
{ // la nueva posicin del elemento i.
if(aux<A[j]) // Si se encuentra la posicin:
{
A[j+1]=aux; // Ponerlo
break; // y colocar el siguiente nmero.
}
else // si no, sigue buscndola.
A[j+1]=A[j];
}
if(j==-1) // si se ha mirado todas las posiciones y no se ha encontrado la
correcta
A[0]=aux; // es que la posicin es al principio del todo.
}
}

void fusion(int A[],int p,int q,int r,bool valor)


{int n=100000;
int m1,m2,i,j,k;
m1=(q-p)+1;
m2=r-q;
int l1[m1+1];
int l2[m2+1];
for(i=0;i<m1;i++)
l1[i]=A[p+i];
l1[m1]=n;
for(j=0;j<m2;j++)
l2[j]=A[q+j+1];
l2[m2]=n;
i=0;
j=0;

if(valor)
{
for(k=p;k<=r;k++)
{
if(l1[i]<=l2[j])
{
A[k]=l1[i];
i++;
}
else
{
A[k]=l2[j];
j++;
}
}
}
else
{
l1[m1]=n*(-1);
l2[m2]=n*(-1);
for(k=p;k<=r;k++)
{
if(l1[i]>=l2[j])
{
A[k]=l1[i];
i++;
}
else
{
A[k]=l2[j];
j++;
}
}
}

}
void mergesortinv(int A[max],int p,int r,bool valor)
{
int q;
if(p<r)
{
q=(p+r)/2;
mergesortinv(A,p,q,valor);
mergesortinv(A,q+1,r,valor);
fusion(A,p,q,r,valor);
}
}

void shellinv(int n, int A[max])


{
int i,sal;
int band ;
int temp;
for(sal=n/2;sal>0;sal=sal/2)
{
do{
band = 0;
for(i=0;i<n-sal;i++)
{
if(A[i]<A[i+sal])//cambio
{
temp=A[i];
A[i]=A[i+sal];
A[i+sal]=temp;
band = 1;
}
}
}
while(band );
}

void seleccioninv(int n, int A[max])


{int i,j,may,aux;
for(i=0;i<n-1;i++)
{may=i;
for(j=i+1;j<n;j++)
if(A[j]>A[may])//cambio
may=j;
aux=A[i];
A[i]=A[may];
A[may]=aux;
}}

void Muestra (int n,int A[max])


{
int i;
for(i=0;i<n;i++)
cout<<"\n "<<A[i]<<endl;
}

void borrado(int n,int A[])


{
int i;
i=1;
while(i<=n)
{
A[i]='127';
i=i+1;
}

int main(void)
{
int A[max];
system ("color 2b");
cout<<"\n ALGORITMO DE ORDENACION "<<endl;

int n;

char op;
float ini,fin,t1,t2,t3,t4,t5,t6,t7,t;

do{
getch();

cout<<"\n INGRESE CANTIDAD VECTOR : ";


cin>>n;
Leer (n,A);
//Muestra(n,A);
cout<<endl;
cout<<"cantidad ingreasda "<<n<<endl;
cout<<"\t\t1. ordenacion burbuja"<<endl;
cout<<"\t\t2. ordenacion quicksort"<<endl;
cout<<"\t\t3. ordenacion shell"<<endl;
cout<<"\t\t4. ordenacion insercion"<<endl;
cout<<"\t\t5. ordenacion seleccion"<<endl;
cout<<"\t\t6. ordenacion heaps"<<endl;
cout<<"\t\t7. ordenacion merge"<<endl;
cout<<"\t\t8. COMPARAR TODOS LOS ALGORITMOS INVERSOS"<<endl;
cin>>op;

switch(op){
case '1': {cout<<"ordenacion burbuja"; ini=clock(); burbujainv(A,n); fin=clock();
t1=fin-ini; Muestra(n,A); cout<<endl<<"tiempo"<<(double)t1/
((double)CLOCKS_PER_SEC)<<"segundos"; break; } //quiero enviar por referencia p
porque sino cambiaria en la direccion de memoria en la funcion
case '2': {cout<<"ordenacion quicksort"; ini=clock(); Quickinv(0,n,A);
fin=clock(); t2=fin-ini;
Muestra(n,A); cout<<"tiempo"<<endl<<(double)t2/
((double)CLOCKS_PER_SEC)<<"segundos"; break; }
case '3': {cout<<"ordenacion shell"; ini=clock(); shellinv(n,A); fin=clock();
t3=fin-ini;
Muestra(n,A); cout<<endl<<(double)t3/
((double)CLOCKS_PER_SEC)<<"segundos"; break; }
case '4':{cout<<"ordenacion insercion"; ini=clock(); insertarinv(n,A);
fin=clock(); t4=fin-ini;
Muestra(n,A); cout<<endl<<(double)t4/
((double)CLOCKS_PER_SEC)<<"segundos"; break; }
case '5': {cout<<"ordenacion seleccion"; ini=clock(); seleccioninv(n,A);
fin=clock(); t5=fin-ini;
Muestra(n,A); cout<<endl<<(double)t5/
((double)CLOCKS_PER_SEC)<<"segundos"; break; }
case '6':{cout<<"ordenacion heaps"; ini=clock(); heapSortinv(A,n); fin=clock();
t6=fin-ini;
Muestra(n,A); cout<<endl<<(double)t6/
((double)CLOCKS_PER_SEC)<<"segundos"; break; }
case '7':{cout<<"ordenacion merge"; ini=clock(); mergesortinv(A,0,n-1,false);
fin=clock(); t7=fin-ini;
Muestra(n,A); cout<<endl<<(double)t7/
((double)CLOCKS_PER_SEC)<<"segundos"; break; }
case '8':{cout<<"comparar todo"<<endl;

ini=clock(); insertarinv(n,A); fin=clock(); t4=fin-ini;


borrado(n,A);Leer (n,A);
ini=clock(); burbujainv(A,n); fin=clock(); t1=fin-ini;
borrado(n,A);Leer (n,A);
ini=clock(); Quickinv(0,n,A); fin=clock(); t2=fin-ini;
borrado(n,A);Leer (n,A);
ini=clock(); shellinv(n,A); fin=clock(); t3=fin-ini;
borrado(n,A);Leer (n,A);
ini=clock(); seleccioninv(n,A); fin=clock(); t5=fin-ini;
borrado(n,A);Leer (n,A);
ini=clock(); heapSortinv(A,n); fin=clock(); t6=fin-ini;
borrado(n,A);Leer (n,A);
ini=clock(); mergesortinv(A,0,n-1,false); fin=clock(); t7=fin-ini;
cout<<" --------comparar:--------------- "<<endl;
cout<<"burbuja inverso "<<(double)t1/
((double)CLOCKS_PER_SEC)<<"segundos"<<endl;
cout<<"insercion inversion "<<(double)t4/
((double)CLOCKS_PER_SEC)<<"segundos"<<endl;
cout<<"seleccion inverso "<<(double)t5/
((double)CLOCKS_PER_SEC)<<"segundos"<<endl;
cout<<"quicksort inverso "<<(double)t2/
((double)CLOCKS_PER_SEC)<<"segundos"<<endl;
cout<<"shell sort inverso "<<(double)t3/
((double)CLOCKS_PER_SEC)<<"segundos"<<endl;
cout<<"heap sort inverso "<<(double)t6/
((double)CLOCKS_PER_SEC)<<"segundos"<<endl;
cout<<"mergesort inverso "<<(double)t7/
((double)CLOCKS_PER_SEC)<<"segundos"<<endl; break;}

default: cout<<"salir";
}

}while(op!='9');

cout<<endl<<"\n salir"<<endl;

getch();
return EXIT_SUCCESS;
}

También podría gustarte