当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: 堆排序也是选择排序的一种,其特点是,在以后各趟的“选择”中利用在第一趟选择中已经得到的关键字比较的结果。
 

 

    摘要:数据结构大学教程 the complete data structure training course 第一章 数据结构及其基本概念 chapter 1 data structure and it’s basic concepts1.1什么是数据结构(what is data structure) 如果你问一个木匠学徒:你工作的工具要用什么,他可能会回答你:“我只要一把锤......
    摘要: 倘若你去问一个木匠学徒:你需要什么样的工具进行工作,他可能会回答你:“我只要一把锤子和一个锯”。但是如果你去问一个老木工或者是大师级的建筑师,他会告诉你“我需要一些精确的工具”。由于计算机所解决的问题都是从生活中抽象出来的问题,其复杂性不言而喻,所以我们需要这样精确有效的工具去解决现实生活中的复杂问题。算法、数据结构都是程序设计中必不可少的精确工具......


组合算法概论(2)
堆排序也是选择排序的一种,其特点是,在以后各趟的“选择”中利用在第一趟选择中已经得到的关键字比较的结果.

堆的定义: 【程序编程相关:由励志书籍的泛滥和良莠不齐想到的

【推荐阅读:日期转换

堆是满足下列性质的数列{r1, r2, …,rn}: 【扩展信息:VB中常用的数据类型和C#中数据类型的对

         或  

若将此数列看成是一棵完全二叉树,则堆或是空树或是满足下列特性的完全二叉树:其左.右子树分别是堆,并且当左/右子树不空时,根结点的值小于(或大于)左/右子树根结点的值.

由此,若上述数列是堆,则r1必是数列中的最小值或最大值,分别称作小顶堆或大顶堆.

   堆排序即是利用堆的特性对记录序列进行排序的一种排序方法.具体作法是:先建一个“大顶堆”,即先选得一个关键字为最大的记录,然后与序列中最后一个记录交换,之后继续对序列中前n-1记录进行“筛选”,重新将它调整为一个“大顶堆”,再将堆顶记录与第n-1个记录交换,如此反复直至排序结束.

所谓“筛选”指的是,对一棵左/右子树均为堆的完全二叉树,“调整”根结点使整个二叉树为堆.

堆排序的算法如下所示:

template

void heapsort ( elem r[], int n ) {

// 对记录序列r[1..n]进行堆排序.

for ( i=n/2; i>0; --i )

                    // 把r[1..n]建成大顶堆

   heapadjust ( r, i, n );

for ( i=n; i>1; --i ) {

r[1]←→r;          

        // 将堆顶记录与当前未经排序子序列

        // r[1..i]中最后一个记录相互交换

heapadjust(r, 1, i-1);            

        // 将r[1..i-1] 重新调整为大顶堆

}

} // heapsort

其中筛选的算法如下所示.为将r[s..m]调整为“大顶堆”,算法中“筛选”应沿关键字较大的孩子结点向下进行.

template

void heapadjust (elem r[], int s, int m) {


...   下一页
    摘要: 又是一个要搞汉语编程的同类 [楼主] 利用失重现象宇航员也许就不会死 acd2366 2003-09-03 03:36:43 -------------------------------------------------------------------------------- 在地球上,当飞机高速向下俯冲,达到一定速度时,人就会出现失重现象,飘起来。这也是训练宇航员适应失重一个......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE