InBlock.gif // Begin from a[1]
InBlock.gif void MaxHeapify( int *a, int index, int len)
InBlock.gif{
InBlock.gif   int l = index * 2;
InBlock.gif   int r = index * 2 + 1;
InBlock.gif
    int largest = -1;
InBlock.gif  
InBlock.gif   if (l <= len && a[l] > a[index])
InBlock.gif  {
InBlock.gif    largest = l;
InBlock.gif  }
InBlock.gif   else
InBlock.gif  {
InBlock.gif    largest = index;
InBlock.gif  }
InBlock.gif
    if (r <= len && a[r] > a[largest])
InBlock.gif  {
InBlock.gif    largest = r;
InBlock.gif  }
InBlock.gif
    if (largest != index)
InBlock.gif  {
InBlock.gif     int tmp = a[largest];
InBlock.gif
      a[largest] = a[index];
InBlock.gif    a[index] = tmp;
InBlock.gif    
InBlock.gif    MaxHeapify(a, largest, len);
InBlock.gif  }
InBlock.gif}
InBlock.gif
  void
BuildMaxHeap( int *a, int len)
InBlock.gif{
InBlock.gif   for ( int i = len / 2; i > 0; i--)
InBlock.gif  {
InBlock.gif    MaxHeapify(a, i, len);
InBlock.gif  }
InBlock.gif}