#include <stdio.h>
#include <stdlib.h>
typedef struct heap{
int capacity;
int top;
int *array;
}* ptr;
ptr create(int num){
ptr p = malloc(sizeof(struct heap));
p->capacity = num;
p->top = -1;
p->array = malloc(sizeof(int)*(num+1));
return p;
}
void Up(ptr Heap, int index){
int parent = (index-1) / 2;
if(parent >= 0){
int temp = Heap->array[index];
if(Heap->array[parent] > temp){
Heap->array[index] = Heap->array[parent];
Heap->array[parent] = temp;
Up(Heap, parent);
}
}
}
void Down(ptr Heap, int index){
int child = 2*index + 1;
if(child+1<=Heap->top && Heap->array[child]>Heap->array[child+1]) child++;
if(Heap->top >= child){
int temp = Heap->array[child];
if(Heap->array[index] > temp){
Heap->array[child] = Heap->array[index];
Heap->array[index] = temp;
Down(Heap, child);
}
}
}
void insert(ptr Heap, int num){
if(Heap->capacity == Heap->top) return;
Heap->array[++Heap->top] = num;
Up(Heap, Heap->top);
}
void visit(ptr Heap){
for(int i=0; i<Heap->top; i++){
printf("%d,", Heap->array[i]);
}
printf("%d",Heap->array[Heap->top]);
printf("\n");
}
int main(){
int num;
scanf("%d",&num);
ptr Heap1 = create(num);
ptr Heap2 = create(num);
for(int i=0; i<num; i++){
int temp;
scanf("%d",&temp);
getchar();
insert(Heap1, temp);
Heap2->array[++Heap2->top] = temp;
}
for(int i=(Heap2->top-1)/2; i>=0; i--){
Down(Heap2, i);
}
visit(Heap1);
visit(Heap2);
}
坏劫·毁坏三界
于 2022-10-21 08:35:33 首次发布