P. 1
Ordenamiento por heapsort - c++

Ordenamiento por heapsort - c++

|Views: 906|Likes:
Publicado porIvan Cf Cruz

More info:

Published by: Ivan Cf Cruz on Nov 11, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as TXT, PDF, TXT or read online from Scribd
See more
See less

05/20/2013

pdf

text

original

#include <conio.h> #include <iostream.h> #include <stdio.h> /*Las siguientes funciones son el corazón del programa.

La primera inserta los elementos de un array de tal modo que queden como un montículo. La segunda elimina sucesivamente la raiz del montículo */ void insertamonticulo(int *, int N); void eliminamonticulo(int *, int N); int main() { int *array; /*Un vector dinámico*/ int N; cout<<"Introduce el número de datos enteros a ordenar: "; cin>>N; array=new int[N+1]; /*El N+1 es por comodidad. Con eso de que en C++ todos los arreglos empiezan desde 0 y el heapsort presupone que empiezan desde 1, pues ignoro el elemento 0 del array y le aumento un elemento para dar cabida a un indice igual al número de elementos*/ int i; array[0]=-1; /*Una linea que puede omitirse. */ cout<<"\n"; /*El siguiente ciclo pide al usuario los numeros de 1 a N*/ for(i=1;i<=N;i++) { cout<<"Introduce el valor "<<i<<": "; cin>>array[i]; } /*Imprimo los numeros en el orden que ingreso el usuario*/ cout<<"\n Lista ingresada por el usuario:\n"; for(i=1;i<=N;i++) { cout<<array[i]<<" "; } cout<<"\n"; getch();//para pausar /*A continuaci¢n llamo a la función que acomoda los números de tal manera que se respeten las condiciones de un monticulo lineal*/ insertamonticulo(array, N); /*Imprimo el resultado que se manifesto en el vector luego de llamar a la función anterior.*/ cout<<"\nDespues de la funcion que inserta en el monticulo:\n"; for(i=1;i<=N;i++) { cout<<array[i]<<" "; } cout<<"\n"; getch();//para hace pausa /*Y finalmente, se acomodan los números luego de quitarseles sucesivamente la raiz del monticulo*/ eliminamonticulo(array, N);

cout<<"\n Despues de la funcion que elimina el monticulo:\n". aux. ap=izq. der=3. getch(). } void insertamonticulo(int *A. izq=2. i++) { k=i. k=1. i>1. /*band es 1. k=k/2. /*El propio lenguaje se encarga de adaptar la parte entera de este tipo de divisiones entre enteros*/ band=1. } if (aux<mayor) { . if (mayor<A[der] && der!=i) { mayor=A[der]. A[i]=A[1]. for(i=1. izq. band. ap=der. /*1 se considera como verdadero*/ while (k>1 && band==1) { band=0. i<=N.*/ int i. } cout<<"\n". der. if (A[k]>A[k/2]) { aux=A[k/2].i<=N. k.i++) { cout<<array[i]<<" ". band. int N) { /*Esta función elimina la raiz del monticulo en forma repetida.*/ int i. A[k]=aux. aux. A[k/2]=A[k]. int N) { /*Esta función inserta los elementos en un monticulo representado como arreglo. ap. band=1. } } } } void eliminamonticulo(int *A. osea verdadero*/ while (izq<i && band==1) { mayor=A[izq].//para hacer pausa return 0. i--) { aux=A[i]. for (i=N. mayor. k. band=1. /*Esta última variable es una bandera que se considera de tipo booleano*/ for (i=2.

der=izq+1. } } .A[k]=A[ap]. } else { band=0. k=ap. } izq=k*2. } A[k]=aux.

You're Reading a Free Preview

Descarga
scribd
/*********** DO NOT ALTER ANYTHING BELOW THIS LINE ! ************/ var s_code=s.t();if(s_code)document.write(s_code)//-->