数据结构排序算法之堆排序(c语言实现)

堆排序也是众多排序算法中比较重要的一种,它属于选择排序的一种。堆可以认为是树的一种,它利用数组的存储方式来存储一个完全二叉树。堆排序就是利用这样的结构进行排序的。以树的结构来说,每一个非终端节点(即不是叶子的结点)都满足:比它的左儿子和右儿子都小,或者比它的左儿子和右儿子的值都大即可。因此,如果{a,b,c,d,e...}为一个堆结构,则堆顶元素(完全二叉树的根)一定是这个序列中所有元素的最大值或最小值。
如果依次将堆顶的最小值(最大值)输出,再将剩余的序列中的元素重新组成一个新的堆,再次得到一个堆顶元素即剩余序列的最小值(最大值),如此反复进行,则做到了按照由小到大(由大到小)的顺序输出原序列,也就得到了一个有序的序列。在堆排序的算法中,更是不需要直接输出,或者借助辅助数组,直接在原数组中进行值的交换即可使原序列变得有序:如果想要按下标由小到大排列,序列值递增,就构造大顶堆;如果想要按照下标有小到大排列,序列值递减,就构造小顶堆。循环将堆顶元素值存入未排序序列的最后一个位置即可。例如,序列长为9,则第一次将堆顶存入array[9],之后重新构造大顶或小顶堆,此时的堆顶元素即可认为是第二大或第二小的元素,存入array[8]中......不断重复进行,直到最后仅剩一个元素,结束循环,即可认为此时已经按照意愿排序完毕。
***这个算法利用了二
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值