首先,堆是什么?一般的实现中,堆就是数组。上图描述的是在一个数组中建堆的全过程。建堆是自下而上的过程,当上面的建堆过程开始时,下面的堆已经是有序的了。自下而上的过程,通俗的理解就是从数组中间向头部反向遍历,这种方式写成程序足够简单,而且建成的堆一定是符合堆的性质的。你的原数组为1 3 4 5 7 2 6 8 0,那么建堆的顺序必然是5 4 3 1,正好反向的,多容易实现!当然我认同你说的,图2和图3交换不会有差别,但是这样不好实现,也不好理解。