(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。二叉堆可以分为两种形式:最大堆和最小堆。若将记录按从大到小排列,建“小”顶堆。若将记录按从小到大排,建“大”顶堆。

说明:在堆排序算法中,我们使用的是最大堆,最小堆通常用于构造优先队列。

算法分析:时间复杂度是O(nlogn)。堆排序属于原址排序:任何时候都只需要常数个额外的元素空间存储临时数据。堆排序是不稳定的排序算法。

#include

#define LEFT(i)        2 * i

#define RIGHT(i)    2 * i + 1

void MaxHeapAjust(int A[], int i, int len)            //调整节点i满足最大堆性质

{

int l = LEFT(i);

int r = RIGHT(i);

int largest, tmp;

if (l <= len && A[l - 1] > A[i - 1])

{

largest = l;

}

else

{

largest = i;

}

if (r <= len && A[r - 1] > A[largest - 1])

{

largest = r;

}

if (i != largest)

{

tmp = A[i - 1];

A[i - 1] = A[largest - 1];

A[largest - 1] = tmp;

MaxHeapAjust(A, largest, len);

}

}

void BuildMaxHeap(int A[], int len)                    //构造最大堆

{

for (int i = len / 2; i > 0; i--)

{

MaxHeapAjust(A, i, len);

}

}

void HeapSort(int A[], int len)                        //堆排序

{

int tmp;

BuildMaxHeap(A, len);

for (int i = len; i > 1; i--)

{

tmp = A[i - 1];

A[i - 1] = A[0];

A[0] = tmp;

MaxHeapAjust(A, 1, i - 1);

}

}

int main(void)

{

int A[] = {4, 1, 3, 2, 16, 9, 10, 14, 8, 7};

HeapSort(A, 10);

for (int i = 0; i < 10; i++)

{

printf("%d ", A[i]);

}

printf("\n");

return 0;

}

Linux 堆分析,堆排序的分析及实现相关推荐

  1. [ 数据结构-C实现 ] 堆、堆排序的分析及实现

      目录 1.堆的概念结构及分类 1.2堆的分类 1.2.1 大堆 1.2.2 小堆 2. 堆的主要接口 3.堆的实现 3.1 堆的初始化 HeapInit 3.2 堆的销毁 HeapDestory ...

  2. linux内核自解压,Linux的初始内核自解压分析

    Linux的初始内核自解压分析 (2009-03-27 19:46:46) 标签: it Linux的初始内核解压 2007-09-19 15:02 来源:论坛整理 作者:lucian_yao [网友 ...

  3. linux病毒木马分析,Linux平台“盖茨木马”分析

    最近对Linux.BackDoor.Gates.6的一个病毒样本进行了分析,通过调查发现Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马.这篇文章主要介绍了Linux ...

  4. Linux内核--网络栈实现分析(二)--数据包的传递过程--转

    转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的&qu ...

  5. Linux内核抢占实现机制分析【转】

    Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介 ...

  6. linux内核中链表代码分析---list.h头文件分析(二)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...

  7. 在linux c 以结构体形式写文件 结构体参数如何在函数中传递,Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量、函数定义...

    原标题:Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量.函数定义 2.4.3文件三auditsc.c2.4.3.1 文件描述 kernel/auditsc ...

  8. linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf

    Linux高级系统级性能分析工具-perf Linux 的系统级性能剖析工具‐perf (二) 承刚 TAOBAO  Kernel Team chenggang.qin@ 第三章  Perf top ...

  9. linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...

    原标题:Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动 2.3 函数实现机制 2.3.1 Linux 字符设备驱动 在linux 3.5.4中,用结构体cdev描述字符设备,cde ...

  10. 浅谈 Linux 高负载的系统化分析

    简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析. 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排 ...

最新文章

  1. 深圳杯---人才吸引力评价模型研究
  2. Android Studio MAT内存分析初探
  3. c语言字符串文库总结,C语言字符串.ppt
  4. java格式_JAVA语言格式
  5. dp线和hdmi区别_HDMI铜线与光纤线有啥区别?为什么铜线传播速度更快?看完涨知识...
  6. 你知道海底捞在全国有多少家店吗?
  7. 命令行下(bat)使用 Lhaplus 自动 压缩 解压文件 (含参数设定说明)
  8. 科恒khs202温控器使用说明书_STC-9200温控器使用说明书——精创温控器
  9. flex右对齐_移动WEB开发 — Flex布局
  10. python美女源代码_python程序员爬取百套美女写真集,同样是爬虫,他为何如此突出...
  11. 家庭智能控制系统开发
  12. 数独-图片定位分割数字
  13. 服务器错误数字(代码)对照表
  14. Echarts结合百度地图API
  15. 移动端 - Android客户端性能测试常见指标
  16. 计算机中常用英文缩写
  17. 7-18 Decimal Equivalent of a Binary Number (10 分)
  18. yolov5-6.1的完全使用手册,含模型训练测试(可训练自己的数据集)
  19. python 模拟微信浏览器请求_python爬虫:使用Selenium模拟浏览器行为
  20. [COGS 2583]南极科考旅行

热门文章

  1. 打造自己的Lnmp固若金汤系统
  2. 解决Ubuntu下VNC客户端无法输入s和m的方法
  3. SQL Server DATEDIFF() 函数
  4. 15.卷1(套接字联网API)---Unix域协议
  5. 23.PHP的哈希表实现
  6. 程序设计中为什么要解耦?
  7. 2018-2019-2 网络对抗技术 20165322 Exp5 MSF基础应用
  8. 把AspDotNetCoreMvc程序运行在Docker上-part3:使用独立的存储容器
  9. denali vip使用经验
  10. JavaSE复习_8 泛型程序设计