排序算法——堆排序算法的实现

堆排序的关键在于顶堆的构建和调整,顶堆是一种特殊的完全二叉树;
大顶堆:根结点的值大于等于所有孩子结点;
小顶堆:根结点的值最小;
1、时间复杂度:o(nlogn)
2、算法思想:(以大顶堆为例)
(1)将给定的数组构建成一个大顶堆;
(2)将首尾元素交换,将堆顶元素放在数组的最后位置;
(3)长度减1,将剩下的元素构建堆;
(4)终止条件:堆的尺寸缩减为1时停止。
3、堆排序实现代码方法一:

/***************************************************************************
*  @file       main.c
*  @author     HAOJIEFENGLANG
*  @date       5  August 2018
*  @remark     5  August 2017
*  @theme      Heap sort
***************************************************************************/
#include<stdio.h>
#include<stdlib.h>

void swap(int a[], int i, int j);
void HeapAdjust(int a[], int s, int n);

//1、先建立堆
void HeapSort(int a[], int n)
{
    //从下往上,从左往右构建大顶堆
    int i = 0;
    for (i = n / 2; i > 0; i--)
    {
        HeapAdjust(a,i,n);
    }
    //a[1]是堆顶元素;
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值