编辑代码


#include <stdio.h>
#include <stdlib.h>

// 自底向上调整堆
void heapifyUp(int arr[], int n, int i) {
    int parent = (i-1) / 2;
    if (parent >= 0 && arr[parent] < arr[i]) {
        int temp = arr[parent];
        arr[parent] = arr[i];
        arr[i] = temp;
        heapifyUp(arr, n, parent);
    }
}

// 构建堆
void buildHeap(int arr[], int n) {
    for (int i = 1; i < n; i++) {
        heapifyUp(arr, n, i);
    }
}

// 打印堆
void printArray(int arr[], int n) {
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int n = 10;
    int arr[] = {4, 10, 3, 5, 1, 7, 8, 9, 6, 2};

    printf("原始数组:\n");
    printArray(arr, n);

    buildHeap(arr, n);

    printf("构建堆后的数组:\n");
    printArray(arr, n);

    return 0;
}