堆排序算法C语言详解

  • 内容
  • 评论
  • 相关

在学习堆排序之前,首先需要了解堆的含义:在含有 n 个元素的序列中,如果序列中的元素满足下面其中一种关系时,此序列可以称之为

  • ki ≤ k2i 且 ki ≤ k2i+1(在 n 个记录的范围内,第 i 个关键字的值小于第 2*i 个关键字,同时也小于第 2*i+1 个关键字)
  • ki ≥ k2i 且 ki ≥ k2i+1(在 n 个记录的范围内,第 i 个关键字的值大于第 2*i 个关键字,同时也大于第 2*i+1 个关键字)

对于堆的定义也可以使用完全二叉树来解释,因为在完全二叉树中第 i 个结点的左孩子恰好是第 2i 个结点,右孩子恰好是 2i+1 个结点。如果该序列可以被称为堆,则使用该序列构建的完全二叉树中,每个根结点的值都必须不小于(或者不大于)左右孩子结点的值。

以无序表{49,38,65,97,76,13,27,49}来讲,其对应的堆用完全二叉树来表示为:



图 3 无序表对应的堆

本文标题:堆排序算法C语言详解

本文地址:http://www.hosteonscn.com/5266.html

评论

0条评论

发表评论

邮箱地址不会被公开。 必填项已用*标注