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

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

下面是一个 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值