00001
00007 #include <stdio.h>
00017 void heapify (int *Arreglo, int i, int heapsize )
00018 {
00019 int derecha, izquierda, mayor;
00020 int temp;
00021
00022 izquierda=2*i+1;
00023 derecha=2*i+2;
00024
00025 if (izquierda<=heapsize && *(Arreglo+izquierda)>*(Arreglo+i))
00026 mayor=izquierda;
00027 else
00028 mayor=i;
00029 if (derecha<=heapsize && *(Arreglo+derecha)>*(Arreglo+mayor))
00030 mayor=derecha;
00031 if (mayor != i) {
00032 temp = *(Arreglo+i);
00033 *(Arreglo+i) = *(Arreglo+mayor);
00034 *(Arreglo+mayor) = temp;
00035 heapify (Arreglo, mayor, heapsize);
00036 }
00037 return;
00038 }
00039
00040 void buildheap (int *Arreglo, int largo)
00041 {
00042 int i;
00043 for (i=(int) ((largo/2)-1);i>=0;i--)
00044 heapify(Arreglo, i, largo);
00045 return;
00046 }
00047
00055 void Heapsort(int *Arreglo, int largo)
00056 {
00057 int i, heapsize;
00058 int temp;
00059
00060 largo=largo-1;
00061 heapsize=largo;
00062
00063 buildheap(Arreglo, largo);
00064 for (i = (int)(largo);i>=1;i--) {
00065 temp=*(Arreglo+0);
00066 *(Arreglo+0)=*(Arreglo+i);
00067 *(Arreglo+i)=temp;
00068 heapsize=heapsize-1;
00069 heapify(Arreglo,0,heapsize);
00070 }
00071 return;
00072 }