Linux 堆分析,堆排序的分析及实现
(二叉)堆是一个数组,它可以被看成一个近似的完全二叉树。二叉堆可以分为两种形式:最大堆和最小堆。若将记录按从大到小排列,建“小”顶堆。若将记录按从小到大排,建“大”顶堆。
说明:在堆排序算法中,我们使用的是最大堆,最小堆通常用于构造优先队列。
算法分析:时间复杂度是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 堆分析,堆排序的分析及实现相关推荐
- [ 数据结构-C实现 ] 堆、堆排序的分析及实现
目录 1.堆的概念结构及分类 1.2堆的分类 1.2.1 大堆 1.2.2 小堆 2. 堆的主要接口 3.堆的实现 3.1 堆的初始化 HeapInit 3.2 堆的销毁 HeapDestory ...
- linux内核自解压,Linux的初始内核自解压分析
Linux的初始内核自解压分析 (2009-03-27 19:46:46) 标签: it Linux的初始内核解压 2007-09-19 15:02 来源:论坛整理 作者:lucian_yao [网友 ...
- linux病毒木马分析,Linux平台“盖茨木马”分析
最近对Linux.BackDoor.Gates.6的一个病毒样本进行了分析,通过调查发现Linux盖茨木马是一类有着丰富历史,隐藏手法巧妙,网络攻击行为显著的DDoS木马.这篇文章主要介绍了Linux ...
- Linux内核--网络栈实现分析(二)--数据包的传递过程--转
转载地址http://blog.csdn.net/yming0221/article/details/7492423 作者:闫明 本文分析基于Linux Kernel 1.2.13 注:标题中的&qu ...
- Linux内核抢占实现机制分析【转】
Linux内核抢占实现机制分析 转自:http://blog.chinaunix.net/uid-24227137-id-3050754.html [摘要]本文详解了Linux内核抢占实现机制.首先介 ...
- linux内核中链表代码分析---list.h头文件分析(二)【转】
转自:http://blog.chinaunix.net/uid-30254565-id-5637598.html linux内核中链表代码分析---list.h头文件分析(二) 16年2月28日16 ...
- 在linux c 以结构体形式写文件 结构体参数如何在函数中传递,Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量、函数定义...
原标题:Linux安全审计机制模块实现分析(16)-核心文件之三auditsc.c文件描述及具体变量.函数定义 2.4.3文件三auditsc.c2.4.3.1 文件描述 kernel/auditsc ...
- linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf
Linux高级系统级性能分析工具-perf Linux 的系统级性能剖析工具‐perf (二) 承刚 TAOBAO Kernel Team chenggang.qin@ 第三章 Perf top ...
- linux注册函数机制,Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动...
原标题:Linux可信计算机制模块详细分析之函数实现机制(1)字符设备驱动 2.3 函数实现机制 2.3.1 Linux 字符设备驱动 在linux 3.5.4中,用结构体cdev描述字符设备,cde ...
- 浅谈 Linux 高负载的系统化分析
简介: 浅谈 Linux 高负载的系统化分析,阿里云系统组工程师杨勇通过对线上各种问题的系统化分析. 讲解 Linux Load 高如何排查的话题属于老生常谈了,但多数文章只是聚焦了几个点,缺少整体排 ...
最新文章
- 深圳杯---人才吸引力评价模型研究
- Android Studio MAT内存分析初探
- c语言字符串文库总结,C语言字符串.ppt
- java格式_JAVA语言格式
- dp线和hdmi区别_HDMI铜线与光纤线有啥区别?为什么铜线传播速度更快?看完涨知识...
- 你知道海底捞在全国有多少家店吗?
- 命令行下(bat)使用 Lhaplus 自动 压缩 解压文件 (含参数设定说明)
- 科恒khs202温控器使用说明书_STC-9200温控器使用说明书——精创温控器
- flex右对齐_移动WEB开发 — Flex布局
- python美女源代码_python程序员爬取百套美女写真集,同样是爬虫,他为何如此突出...
- 家庭智能控制系统开发
- 数独-图片定位分割数字
- 服务器错误数字(代码)对照表
- Echarts结合百度地图API
- 移动端 - Android客户端性能测试常见指标
- 计算机中常用英文缩写
- 7-18 Decimal Equivalent of a Binary Number (10 分)
- yolov5-6.1的完全使用手册,含模型训练测试(可训练自己的数据集)
- python 模拟微信浏览器请求_python爬虫:使用Selenium模拟浏览器行为
- [COGS 2583]南极科考旅行