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

原创 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);   //前面的无序区调整为堆
    }

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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sxhelijian/article/details/50295637

数据结构 — 堆排序

1、堆排序的时间复杂度与归并排序相同,O(nlogn)。堆排序的优势在与他只需要固定数量的额外空间,堆排序要比空间复杂性为O(n)的归并排序稍微慢一些,但是比空间复杂性为O(1)的归并排序要快。 2、...
  • PeersLee
  • PeersLee
  • 2015-12-20 13:14:31
  • 1042

数据结构 — 浅析堆排序

堆排序
  • Dawn_sf
  • Dawn_sf
  • 2017-05-19 10:39:40
  • 1054

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

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

数据结构——堆排序

堆排序要解决的几个问题 1:如何将数据排列成堆的形式——初始堆的建立 2:输出堆顶元素后,剩余元素如何再整理成新的堆——堆的整理 3:输出元素放在什么位置...
  • zfpnuc
  • zfpnuc
  • 2011-04-28 19:59:00
  • 3715

数据结构—堆排序

  • 2012年10月24日 19:49
  • 683KB
  • 下载

数据结构之---C语言实现堆排序

数据结构之---C语言实现堆排序
  • u012965373
  • u012965373
  • 2015-09-08 15:08:47
  • 8177

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

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

数据结构基础之堆排序(Java 实现)

总结本文地址 http://blog.csdn.net/never_cxb/article/details/50211631最近做到一道笔试题百度笔试题 有20个数组,每个有500个元素,升序排列,找...
  • never_cxb
  • never_cxb
  • 2015-12-07 22:07:51
  • 2040

【数据结构和算法16】堆排序

堆排序,顾名思义就是利用堆这个数据结构对数据项进行排序,前面提到过,堆数据结构中,节点大于或等于自己的子节点。那么我们可以将待排序的数据项依次添加到堆中,然后再依次取出根节点即可。从堆中取出的数据项是...
  • eson_15
  • eson_15
  • 2016-04-19 19:54:21
  • 2424

堆(数据结构)及堆排序

1堆 这里的堆是指一种数据结构(或数据结构属性),非指堆内存。堆属性用二叉树来体现,具堆属性的数据结构才可被叫做为堆。具堆属性的数据结构满足以下笔记的“顺序”和“形状”两个条件。 (1)顺序 ...
  • misskissC
  • misskissC
  • 2013-12-21 02:08:58
  • 5906
收藏助手
不良信息举报
您举报文章:数据结构示例——堆排序过程
举报原因:
原因补充:

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