C语言代码实现构造大根堆
时间: 2023-02-10 21:31:20 浏览: 131
构造大根堆是堆排序的一个重要步骤。在构造大根堆时,需要保证堆中每一个父节点的值都大于它的子节点。
下面是一个 C 语言实现的构造大根堆的代码示例:
```
#include <stdio.h>
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
阅读全文