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 }