#include<stdio.h>voidHeapAdjust(int a[],int k,int len){
a[0]= a[k];for(int i = k *2; i <= len; i *=2){if(i < len&&a[i]<a[i+1])
i++;if(a[0]>= a[i])break;else{
a[k]= a[i];
k = i;}}
a[k]= a[0];}voidBuild_Max_Heap(int a[],int len){for(int i = len /2; i >0; i--)HeapAdjust(a, i, len);}voidmain(){int a[8];for(int i =1; i <8; i++){
a[i]= i;printf("%d\n", a[i]);}int len =sizeof(a)/sizeof(a[1])-1;Build_Max_Heap(a, len);for(int i =1; i <8; i++)printf("%d\n", a[i]);}
堆排序(C语言,带测试用例)#include<stdio.h>void HeapAdjust(int a[], int k, int len) { a[0] = a[k]; for (int i = k * 2; i <= len; i *= 2) { if (i < len&&a[i]<a[i+1]) i++; if (a[0] >= a[i]) break; else { a[k] = a[i]; k = i;