数组起始元素下标为0, 长度为n。 建立最小堆 算法实现比较丑, 好像比一般的实现多了一些比较操作, 具体在heapdown函数中, 判断是否数组越界? void buildheap(int a[], int n) { for(int i = (n-1)/2; i >= 0; i--) { heapdown(a, n, i); } } void heapdown(int a[], int n, int i) { int j = i; int tmp = a[i]; while(2j + 1 < n) { int little = 2j+1; if(2j+2 < n && a[little] > a[2j+2]) little = 2j+2; if(a[little] > tmp) break; a[j] = a[little]; j = little; } a[j] = tmp; }