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

原创 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)。要弄清楚堆排序,就要先了解下二叉堆这种数据结构。本文不打算完全讲述二叉堆的所有操作,而是着重讲述堆排序中要用...
  • mmc_maodun
  • mmc_maodun
  • 2014年03月04日 00:01
  • 22827

数据结构堆排序

  • 2012年03月30日 16:54
  • 1KB
  • 下载

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

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

堆排序的完整过程

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

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

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

第六章 堆排序习题

6.1堆 堆节点的高度:为该节点到叶节点最长简单路径上#边的个数#。(因此,根节点所在位置高度为0) 6.1-1 在高度为h的堆中,元素个数最多和最少分别是多少?最多:2h+1−1最少:2h最多:...
  • u012889441
  • u012889441
  • 2017年02月19日 11:01
  • 529

五十道编程小题目 --- 28 八大排序算法 java 之 04堆排序

4.选择序—堆排序(Heap Sort) 堆排序是一种树形选择排序,是对直接选择排序的有效改进。 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满...
  • wangnanwlw
  • wangnanwlw
  • 2016年09月05日 19:05
  • 582

堆排序实例

  • 2012年12月03日 10:26
  • 875KB
  • 下载

堆排序的学习示例

  • 2014年07月06日 18:08
  • 5KB
  • 下载

使用堆排序解决的题目

已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离可以不超过k, 并且k相对于数组来说比较小。请选择一个合适的排序算法针对这个数据进行排序给定一个int数组A, 同时...
  • qq_36008665
  • qq_36008665
  • 2017年02月28日 15:09
  • 207
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:数据结构示例——堆排序过程
举报原因:
原因补充:

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