堆
#include <stdio.h>
#include <stdlib.h>
typedef int ElemType;
typedef struct{
ElemType *data;
int size;
int capacity;
}heap;
void BuildMaxHeap(ElemType A[], int len);
void HeadAdjust(ElemType A[], int k, int len);
void BuildMaxHeap(ElemType A[], int len) {
for (int i = len / 2 ; i > 0 ; i--) {
HeadAdjust(A, i, len);
}
}
void HeadAdjust(ElemType A[], int k, int len) {
A[0] = A[k];
for (int i = 2 * k; i <= len; i = 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];
}
int main(){
heap h;
printf("请分别输入堆的长度 容量:");
scanf("%d %d", &(h.size), &(h.capacity));
h.data = (ElemType *)malloc((h.capacity + 1) * sizeof(ElemType));
h.data ++;
for (int i = 0; i < h.size; i++) {
scanf("%d", (h.data) + i);
}
h.data --;
BuildMaxHeap(h.data, h.size);
for (int i = 1; i <= h.size; i++) {
printf("%d ", *(h.data + i));
}
free(h.data);
return 0;
}