数据结构示例——堆排序过程

原创 2015年12月14日 15:43:15

完整算法见[例程],本文用一个例子,演示堆排序的过程。

例:对{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7}进行堆排序的过程。

算法如下:

void HeapSort(RecType R[],int n)
{
    int i;
    RecType temp;
    //(1)循环建立初始堆
    for (i=n/2; i>=1; i--) 
        sift(R,i,n);
    //(2)进行n-1次循环,完成推排序
    for (i=n; i>=2; i--) 
    {
        temp=R[1];       //将第一个元素同当前区间内R[1]对换
        R[1]=R[i];
        R[i]=temp;
        sift(R,1,i-1);   //筛选R[1]结点,得到i-1个结点的堆
    }
}

(1)循环建立初始堆

    for (i=n/2; i>=1; i--) 
        sift(R,i,n);

用给出的序列构造堆的初始状态如下:
这里写图片描述
在此基础上,根据上述代码,从最后一个分支节点开始调整,目标是得到大根堆。过程如下图:
这里写图片描述
这个堆的存储结构是:
这里写图片描述

(2)进行n-1次循环,完成推排序

    for (i=n; i>=2; i--) 
    {
        temp=R[1];       //最大值交换到最后
        R[1]=R[i];
        R[i]=temp;
        sift(R,1,i-1);   //前面的无序区调整为堆
    }

过程图示如下:
这里写图片描述
请继续补充画完。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

【数据结构与算法】内部排序之三:堆排序(含完整源码)

堆排序、快速排序、归并排序(下篇会写这两种排序算法)的平均时间复杂度都为O(n*logn)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用...

堆排序原理及算法实现(最大堆)

堆排序        堆排序是利用堆的性质进行的一种选择排序。下面先讨论一下堆。 1.堆   堆实际上是一棵完全二叉树,其任何一非叶节点满足性质:   Key[i]=Key[2i+1]&&ke...

堆排序的完整过程

本文是对兰亭风雨大牛的堆排序文章的补充,方便自己回头复习,可以在看完其文章后再看这篇博文。 输入A[0,1,2......n-1] 堆排序的完整过程(以从小到大排序为例,选用最大堆): 一....
  • tomcmd
  • tomcmd
  • 2015年08月25日 23:41
  • 496

白话经典算法系列之七 堆与堆排序

堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特...

数据结构--几个经典例子需要掌握

我个人的观点(未必正确),作为一个程序员需要对算法和数据结构具有一定理论和经验的基础。       在程序员的经典教程中很多人提到 算法+数据结构=程序设计。如果你想要在开发这一行谋求很好的发展,这个...
  • xlovem
  • xlovem
  • 2005年08月06日 09:35
  • 3525

堆(数据结构)及堆排序

1堆 这里的堆是指一种数据结构(或数据结构属性),非指堆内存。堆属性用二叉树来体现,具堆属性的数据结构才可被叫做为堆。具堆属性的数据结构满足以下笔记的“顺序”和“形状”两个条件。 (1)顺序 ...

DC4C代码阅读(2)——概述

dc4c分为三个部分: 1、注册节点——register node     一个注册节点就是一个守护进程对(父进程负责监控子进程的状态,子进程负责提供服务)。     (1)注册节点负责接受计算...

用swap方法强行释放STL容器占用的内存

项目中用到了vector,list,set等容器,运行完毕后需要清理,以释放内存以降低内存开销。 一开始我直接使用clear()函数来释放,实际观察下来,内存并没有被释放。   经同事提醒,cl...

重学数据结构系列之——堆及堆排序

1.定义 满足一下两个条件 1.首先它是一颗完全二叉树(就是除了最后一层,每个结点都有两个孩子,最后一层只缺少右边的若干结点。)看看这个就明白:http://baike.baidu.com/pic...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构示例——堆排序过程
举报原因:
原因补充:

(最多只允许输入30个字)