11_堆及堆排序.pptVIP

  • 121
  • 0
  • 约3.15千字
  • 约 14页
  • 2018-07-07 发布于山东
  • 举报
11_堆及堆排序.ppt

堆是满足下列性质的数据序列{r1, r2, …,rn}: 堆排序的过程 对n个数据的原始无序序列建堆,输出堆顶元素 将剩下的n-1个元素调整为堆,输出堆顶元素 将剩下的n-2个元素调整为堆,输出堆顶元素 …….. 剩下的最后一个元素,本身就是堆 void HeapSort ( HeapType H ) { CreateHeap(H); //建立初始堆 H.r[1]??H.r[n]; //堆顶元素与最后一个元素交换  for(i=n-1; i1; i--) //连续进行堆调节和交换 { HeapAdjust(H);  H.r[1]??H.r[i]; } } 第二个问题解决方法——筛选 所谓“筛选”指的是,对一棵左/右子树均为堆的完全二叉树,“调整”根结点使整个二叉树也成为一个堆 方法:输出堆顶元素之后,以堆中最后一个元素替代之;然后将根结点值与左、右子树的根结点值进行比较,并与其中小者进行交换;重复上述操作,直至叶子结点,将得到新的堆,称这个从堆顶至叶子的调整过程为“筛选” 算法 :堆调节 void HeapAdjust (HeapType H, int s, int m) { // 已知H.r[s..m]中记录的关键字除H.r[s].key之外均满足堆的定义

文档评论(0)

1亿VIP精品文档

相关文档