move_down (int data[ ], int first, int last) {int largest = 2*first+1; while (largest <= last) { /* LI: All the nodes in the tree rooted at first0, except for node first, satisfy the heap property. largest is either 2*first+1 or last+1. When largest is last+1, node first satisfies the heap property. */ if (largest < last) /* data[first] has two children */ /* (at 2*first+1 and 2*first+2) */ if (data[largest] < data[largest+1]) /* choose larger child */ largest++; /* swap values if necessary and move down */ if (data[first] < data[largest]) { swap(data+first, data+largest); first = largest; largest = 2*first+1; } else largest = last+1; /* to exit the loop: the heap property */ } /* isn't violated at data[first]; */ }