#include<stdio.h>
#include<stdlib.h>
void heapify(int arr[], int n, int i)
{
int largest = i; // INICIALIZAR masgrande COMO RAIZ
int l = 2 * i + 1; // HIJO IZQUIERDO (l)
int r = 2 * i + 2; // HIJO DERECHO (r)
//SI EL NODO IZQ ES MAS GRANDE QUE EL PADRE
if (l < n && arr[l] > arr[largest])
largest = l;
// SI EL NODO DERECHO ES MAS GRANDE QUE EL PADRE
if (r < n && arr[r] > arr[largest])
largest = r;
//SI EL NODO MAS GRANDE NO ES LA RAIZ
if (largest != i) {
//swap(arr[i], arr[largest]);
int aux=arr[largest];
arr[largest]=arr[i];
arr[i]=aux;
//FUNCION RECURSIVA HASTA QUE CADA NODO PADRE SEA MAYOR QUE SUS HIJOS
heapify(arr, n, largest);
}
}
void heapSort(int arr[], int n)
{
int i;
// CONTRUYENDO EL HEAP(MONTICULO)
for (i = n/2-1;i>=0;i--){
heapify(arr, n, i);
}
// One by one extract an element from heap (ESTE NO LO ENTIENDO)
for (i = n - 1; i >= 0; i--) {
// MOVER LA RAIZ ACTUAL AL FINAL
int aux2=arr[i];
arr[i]=arr[0];
arr[0]=aux2;
// VOLVER A LLAMAR A LA FUNCION RESTANDOLE UNO AL TAMA�O DEL HEAP
heapify(arr, i, 0);
}
}
/*FUNCION PARA IMPRIMIR EL ARREGLO YA ORDENADO */
void printArray(int arr[], int n)
{
int i;
for (i = 0; i < n; ++i)
printf("%i ",arr[i]);
printf("\n");
}
int main()
{
int arr[] = { 12, 11, 13, 5, 6, 7};
int n = 6,i;
printf("arreglo original:\n");
for(i=0;i<n;i++){
printf("%i ",arr[i]);
}
printf("\n\n");
heapSort(arr, n);
printf("arreglo ordenado:\n");
printArray(arr, n);
}
{"html5":"htmlmixed","css":"css","javascript":"javascript","php":"php","python":"python","ruby":"ruby","lua":"text\/x-lua","bash":"text\/x-sh","go":"go","c":"text\/x-csrc","cpp":"text\/x-c++src","diff":"diff","latex":"stex","sql":"sql","xml":"xml","apl":"apl","asterisk":"asterisk","c_loadrunner":"text\/x-csrc","c_mac":"text\/x-csrc","coffeescript":"text\/x-coffeescript","csharp":"text\/x-csharp","d":"d","ecmascript":"javascript","erlang":"erlang","groovy":"text\/x-groovy","haskell":"text\/x-haskell","haxe":"text\/x-haxe","html4strict":"htmlmixed","java":"text\/x-java","java5":"text\/x-java","jquery":"javascript","mirc":"mirc","mysql":"sql","ocaml":"text\/x-ocaml","pascal":"text\/x-pascal","perl":"perl","perl6":"perl","plsql":"sql","properties":"text\/x-properties","q":"text\/x-q","scala":"scala","scheme":"text\/x-scheme","tcl":"text\/x-tcl","vb":"text\/x-vb","verilog":"text\/x-verilog","yaml":"text\/x-yaml","z80":"text\/x-z80"}