第1章 数据结构与算法(10)

2020-02-21 20:41

在具体讨论堆排序法之前,先讨论这样一个问题:在一棵具有n个结点的完全二叉树[用一维数组H(1:n)表示]中,假设结点H(m)的左右子树均为堆,现要将以H(m)为根结点的子树也调整为堆。这是调整建堆的问题。

例如:假设图a是某完全二叉树的一棵子树。显然,在这棵子树中,根结点47的左、右子树均为堆。现在为了将整个子树调整为堆,首先将根结点47与其左、右子树的根结点值进行比较,此时由于左子树根结点91大于右子树根结点53,且它又大于根结点47,因此,根据堆的条件,应将元素47与91交换,如图b所示。经过这一次交换后,破坏了原来左右子树的堆结构,需要对左子树再进行调整,将元素85与47进行交换,调整后的结果如图c所示。

由这个例子可以看出,在调整建堆的过程中,总是将根结点值与左、右子树的根结点值进行比较,若不满足堆的条件,则将左、右子树根结点值中的大者与根结点值进行交换。这个调整过

程一直做到所有子树均为堆为止。

有了调整建堆的算法后,就可以将一个无序列建成为堆。 堆排序的方法。略

堆排序的方法对于规模较小的线性表并不适合,但对于较大规模的线性表来说是很有效的。在最坏情况下,堆排序需要比较的次数为:

nlogn

2

小结:重点

查找

在最坏情况下,二分查找只需要比较log2n次, 在最坏情况下,顺序查找则需要比较n次。

交换类排序

冒泡排序法,在最坏情况下,需要比较n(n-1)/2次。

即O(n2)

快速排序法,在最坏情况下,需要比较n(n-1)/2次。 即O(n2) 平均时间: O(nlog2n)

插入类排序

简单插入排序法,在最坏情况下,需要比较n(n-1)/2次。 即O(n2)

希尔排序法,在最坏情况下,需要比较n1.5=n3/2= nn次。

选择类排序

在最坏情况下,简单选择排序法需要比较n(n-1)/2次。 在最坏情况下,堆排序需要比较的次数为:nlog2n


第1章 数据结构与算法(10).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如何用WinPE系统安装Win7系统

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: