排序算法-堆排序

1.堆排序(以大顶堆为例)
  (1).堆排序简介:
  堆排序是一个时间复杂度为O(nlog2n)(初始化堆的次数n(几个排序的数字初始化堆几次) × 建堆的过程 log2n(找最大数字的过程))、空间复杂度为O(1)(排序过程并不需要新的空间来存储数据)以及非稳定(建堆的过程可能会改变两个相同数字的相对位置)的排序算法。
  (2).堆排序对数据结构的要求:
  堆排序在排序过程中必须维护一个完全二叉树.我们使用数组来模拟堆,并以下标的方式来构建父节点与子节点存在的物理关系。
  (3).堆排序详解
  ①建立初始堆:从最后一个非叶子节点的父节点开始(计算方式:(数组的长度 - 1 / 2 )- 1),当前父节点与两个子节点进行大小比较,最大的节点应被交换到父节点位置,这一比较过程应从最后一个父节点到根节点,所以是自下而上的。
  ②构造顺序序列:把当前根节点的值和最后一个叶子节点进行交换,这时数组长度减一(叶子节点减一),因为已交换的数字已经排序过。交换过后的堆已不满足大顶堆,因为根节点的值已不是最大值,所以这时的比较操作是从根节点到最后一个父节点,这是一个自上而下的过程。这样的构造排序的过程应维持到仅仅只有最后一个根节点。
  (4).堆排序代码(Java):

/**
 * @author Cookie
 * @Project: DataStructuresAndAlgorithms
 * @Packa
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值