十大排序算法之堆排序 --- (C语言版)

简言:这里我只是给出了代码和注释,如果想要理解算法的意义,可以去看这位博主的讲解还是很清楚的。如果有不清楚的话,欢迎小伙伴私聊求问。

堆排序(C语言)_小-黯的博客-CSDN博客_堆排序c语言

这里需要自己给数组赋值。最终实现数组的推排序赋值

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

swap(int arr[],int i,int max)
{
    int tmp = arr[i];
    arr[i] = arr[max];
    arr[max] = tmp;
}
void Heapify(int arr[],int i,int N)
{
    //n表示的是这棵树有多少个节点
    //这个只能运算最简单的堆运算

    int rchild = 2 * i + 2;//右孩子结点
    int lchild = 2 * i + 1;//左孩子结点
    int max = i;//保存最大值的数组下标


    if(i>=N){
        return ;
    }

    //如果我的左孩子比我的父亲节点还要大的话,就将左孩子的数组下标赋值给我们的max变量
    if(arr[lchild]>arr[max] && lchild < N){
        max = lchild;
    }
    //如果我们的右孩子比我的父亲结点大的话,就将我的右孩子赋值给我的max下标
    if(arr[rchild] > arr[max] && rchild<N){
         max=rchild;
    }
    if(max != i){
        swap(arr,i,max);
        Heapify(arr,max,N);
    }

}

void CreatMaxHeap(int arr[],int N)
{
    int i,last_node = N - 1;
    int parent = (last_node - 1)/2;//这里是最后一个二叉树的位置
    for(i = parent;i >= 0;i--){
        Heapify(arr,i,N);
    }
}
void HeapSort(int arr[],int N)
{
    CreatMaxHeap(arr,N);
    int i;
    for(i = N-1;i>=0; i--)
    {
        swap(arr,0,i);
        Heapify(arr,0,i);
    }
}
int main()
{
    int arr[7] = {3,7,2,9,8,11,5};
    int i,N = 7;
    //Heapify(arr,0,N);
    //CreatMaxHeap(arr,N);
    HeapSort(arr,N);

    for(i = 0;i<N;i++){
        printf("%d ",arr[i]);
    }
    return 0;
}
 

运行结果;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩林ovo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值