Heap 1

Descargar como txt, pdf o txt
Descargar como txt, pdf o txt
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

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy