堆排序Heap sort

堆排序有点小复杂,分红三块html

第一块,什么是堆,什么是最大堆数组

第二块,怎么将堆调整为最大堆,这部分是重点数据结构

第三块,堆排序介绍htm


第一块,什么是堆,什么是最大堆blog

什么是堆排序

这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。递归

堆能够视为一棵彻底的二叉树,彻底二叉树的一个“优秀”的性质是,除了最底层以外,每一层都是满的,这使得堆能够利用数组来表示,每个结点对应数组中的一个元素.索引

数组与堆之间的关系get

Heap1

二叉堆通常分为两种:最大堆和最小堆。it

什么是最大堆

堆中每一个父节点的元素值都大于等于其孩子结点(若是存在),这样的堆就是一个最大堆

所以,最大堆中的最大元素值出如今根结点(堆顶)

节点与数组索引关系

对于给定的某个结点的下标i,能够很容易的计算出这个结点的父结点、孩子结点的下标,并且计算公式很漂亮很简约

Image(2)

第二块,怎么将堆调整为最大堆,这部分是重点

整个过程以下图所示

在4,14,7这个小堆里边,父节点4小于左孩子14,因此二者交换

在4,2,8这个小堆里边,父节点4小于右孩子8,因此二者交换

Heap3

上图展现了一趟调整的过程,这个过程递归实现,直到调整为最大堆为止

第三块,堆排序介绍

堆排序就是把堆顶的最大数取出,

将剩余的堆继续调整为最大堆,具体过程在第二块有介绍,以递归实现

剩余部分调整为最大堆后,再次将堆顶的最大数取出,再将剩余部分调整为最大堆,这个过程持续到剩余数只有一个时结束

下边三张图详细描述了整个过程

Heap4

Heap5

Heap6

 

参考文章

http://www.cnblogs.com/kkun/archive/2011/11/23/2260286.html

相关文章
相关标签/搜索