C语言代码实现构造大根堆

时间:2025-04-23 06:59:31

构造大根堆是堆排序的一个重要步骤。在构造大根堆时,需要保证堆中每一个父节点的值都大于它的子节点。

下面是一个 C 语言实现的构造大根堆的代码示例:

``` #include <>

void max_heapify(int *arr, int start, int end) { // 建立父节点指标和子节点指标 int dad = start; int son = dad * 2 + 1; while (son <= end) { // 如果子节点指标在范围内才做比较 if (son + 1 <= end && arr[son] < arr[son + 1]) // 先比较两个子节点大小,选择最大的 son++; if (arr[dad] > arr[son]) // 如果父节点大於子节点代表调整完毕,直接跳出函数 return; else { // 否则交换父子内容再继续子节点和孙节点比较 int temp = arr[dad]; arr[dad] = arr[son]; arr[son] = temp; dad = son; son = dad * 2 + 1; } } }

void heap_sort(int *arr, int len) { // 初始化,i 从最後一个父节点开始调整 for (int i = len / 2 - 1; i >= 0; i--) max_heapify(arr, i, len - 1); // 全部交换完毕后,最后的结点就是最大的 for (int i = len - 1; i > 0; i--) { int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; max_heapify(arr, 0, i - 1); } }

int main() { int arr[] = {3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4