说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

C语言实现堆排序(Heap Sort)

HTML文档下载 WORD文档下载 PDF文档下载
对于大量的记录的排序来说,堆排序是一种非常有效的方法。如果排序的记录数不大,则堆排序的优越性并不明显,而且还需要一个供交换时暂存记录的辅助空间。

 

对于大量的记录的排序来说,堆排序是一种非常有效的方法。如果排序的记录数不大,则堆排序的优越性并不明显,而且还需要一个供交换时暂存记录的辅助空间。

 

堆排序的时间复杂度是O(nlgN),与快速排序达到相同的时间复杂度。但是在实际应用中,我们往往采用快速排序而不是堆排序。这是因为快速排序的一个好的实现,往往比堆排序具有更好的表现。堆排序的主要用途,是在形成和处理优先级队列方面。另外,如果计算要求是类优先级队列(比如,只要返回最大或者最小元素,只有有限的插入要求等),堆同样是很适合的数据结构。

 

 

测试代码:

 

#include <stdio.h>#define MARK 0static a[8] = {MARK,25,4,36,1,60,10,58,};int count = 1;void heap(int n);void adjust(int i,int n);int main(void){	int i;	printf("源数据为:");	for(i = 1;i<8;i++)		printf("%5d",a[i]);	heap(7);	printf("\n排序后的数据为:");	for(i = 1;i<8;i++)		printf("%5d",a[i]);	printf("\n");	return 0;}void heap(n)int n;{	int i,j,t;	for(i =n/2;i>0;i--)		adjust(i,n);	printf("\n初始化成堆===>   ");	for(i = 1;i < 8;i++)		printf("%5d",a[i]);	for(i = n-1;i>0;i--)	{		t = a[i+1];		a[i+1] = a[1];		a[1] = t;		adjust(1,i);		printf("\n第%2d步操作结果===>",count++);		for(j = 1;j<8;j++)			printf("%5d",a[j]);	}}void adjust(i,n)int i,n;{	int j,k,r,done=0;	k = r = a[i];	j = 2*i;	while((j<=n)&&(done==0))	{		if(j<n)		{			if(a[j]<a[j+1])				j++;		}		if(k>=a[j])			done = 1;		else		{			a[j/2] = a[j];			j = 2*	j;		}	}	a[j/2] = r;}

 

 

 

电信开放平台应用内计费SDK 助力App小额快捷支付 专心做设计!开源跨平台应用开发框架Appverse Mobile 无线盛宴尽在阿里百川开放大会 医学界的Instagram:加拿大重症监护医生开发照片分享应用 2014中国移动开发者大调查第二批获奖名单揭晓 基于OpenStack的私有云开发部署实践 亚马逊云平台的迁移过程 【干货】微信企业号开发资源集锦 CSS生日快乐:CSS之父Håkon Wium Lie访谈录 好友近2000万,绑定银行卡过千万,日会话近百万,招商服务号成功之道 一名程序员十年技术之路的思考与感悟 聚焦企业号、服务号典型案例 微信开发者大会深圳站正式开启 Objective-C之父Brad Cox访谈:我的编程之路 【先锋】完成B轮融资的TalkingData新商业模式:平台理念+跨界分析+技术开源 1/10计算资源,1/3耗时,Spark颠覆MapReduce保持的排序记录 Cookie已死,看Facebook、Google、Apple如何追踪用户 Clay.io基于AWS、Docker、HAProxy等的10X架构打造 经典服务/企业号案例来袭!2014微信开发者大会(深圳)亮点抢先看 移动应用云APICloud宣布完成A轮500万美金融资 从Apache Storm学到的经验教训 【CTO俱乐部走进天津】探讨如何成为技术团队管理者 不容错过!参加MDCC 2014移动开发者大会八个理由 你的钱被洗劫了么!APP安全问题来袭 10大最常见的数据库安全问题 南航微信服务号是如何炼成的? 超40项功能改进,虚幻引擎4.5正式发布! 【工具推荐】ER:可轻松构建一站式AJAX Web应用的开发框架 GraphLab:将大数据分析从理念运用到生产 支持Android 5.0:完全用Ruby的Ruboto框架迎1.2.0更新! 万物互联第一步:采用AllJoyn技术的智能硬件 【专访】敏捷专家何勉:让测试成为拉动组织敏捷实施的力量 问一个比较弱智的问题 js文件里如何使用另一个js文件里的函数30? 哪位大虾知道可以在哪里下载mpeg-1的codec,谁先告诉有效地址谁先得分!(不给分是小狗!) 可能很菜的问题,送分的问题!! 一个关于CDaoTableDefInfo的问题 ado的问题??求救!!!高分!!! 有关代码重用的问题,对Form的继承。 一个关于CString.Format的问题 学习编程时学图算法怎么学好? 一个很简单的CREATE TABLE语句为什么出错呢?向大家请教! jbuilder5运行需要最低配置 ,傻傻的问 Delphi6的盗版已经到了@_@ 喂,为什么我提问只能给最多37分,原先可比这要多的多 一个关于派生类的问题 关于页面关闭的问题 用new JTalbe(10, 20)创建了一个table,如何设置该table列(column)的宽度 请教一个关于用VC6开发outlook\exchange的问题。急!急! 时间服务器 请问一下,用DBM,如果用户注册的数量多了以后,程序的速度很一般的文本速度比较哪个快 纯数学问题:如何求模逆元? VB中实现进程间通信的方法?VB中的CallWindowProc的用法?VB中如何发送自定义的消息? 请问哪里能免费下载BCB5?下载多长时间没有关系,只要能够正确使用就可以了。 怎样得知CListCtrl中当前选项? 我想从WINME中自带的一个驱动程序提取出来在WIN97中安装,请问应如何做? 菜问题(2) 请教:为何数据库数据无法在网页上显示? CEditView 一定要override onChange function(ON_CONTROL_REFLECT(EN_CHANGE, OnChange))????;否则input 时不我待会错??? 请教:不通过页面,用VB如何得知来访者的IP? 如何将vcd转化为real的格式???????????急!!!!!!!!!!!!!! 对DMO播放内存MPEG2数据没有头绪,谁能给点提示? 支持bestbestbest!!!!!!!!!!!! 如何在win98下使用EJB? applet 可以打开到一个server的socket么 谁知道国内哪有下载jdk1.4,Thanks! 如何配置For Oracle8i 的ODBC? 请教如何动态改变窗口大小 弟兄们救命啊!!!rational rose中mdl的导出 Jbuilder5.rar的密码? 这条语句为何通不过?请指教! 各位大虾:一个WWW服务器,不通过页面,要得到访问者的IP怎么办? 劳改犯严正声明:支持3B、蝈蝈的正确领导,声讨"捣蛋杂碎"及"跳梁小丑".坚决维护水园的安定团结. 哪位高手能给我解释一下,关于Hook技术,谢谢 pcb板什么什么东东? 请问:malloc()函数的作用是什么? 关于TTS(vcmd.exe自动化服务器) to 斑竹 :::::::,为什么我提问给分怎么比以前少了许多 急急, 怎樣從在一個框架里放打印按鈕,但要打出來的是另外一個框架的東西? 我是一个初学者,要成为一名软件工程师,要学习哪些? ···基于水园各位GGJJDDMM的快乐着想,特别给大家一次浪漫的机会,以此缓解水园的紧张气氛··· 北京地区有ADSL了吗????? 新手向大家请教了关于jdk 一个池塘周长为240m沿池塘周围每隔4米栽一棵柳树,每两棵柳树之间等距离栽了3棵杨树,一共栽了多少棵柳树,多少棵杨树?求算式子? 在一个周长400米的圆形池塘周围植树,每隔4米栽一棵 ,一共可栽多少棵? 同学们在全长100米的小路一边植树,每隔5米栽一颗(两端都栽)一共需要多少树苗? 一个湖泊周长为1800米,沿着湖泊周围每隔12米栽一棵柳树,每个两棵柳树中间载一棵桃树和一棵杨树.问:每两棵树之间的距离是多少?共多少棵树? 在周长180米的池塘种树,每隔12米种一棵,要种几棵? 同学们在全长100米的小路一边植树,每隔5米栽一棵(两端要载).一共需要多少棵树苗? 一个湖泊周长1200米,沿湖泊周围每隔3米栽一棵杨树,每两棵杨树中间栽一棵柳树.湖泊周围各栽多少柳树杨树 一个圆形的花坛,周长是120米,如果沿着花坛周围每隔5米种一棵杨树,每两棵杨树之间种一棵树,一共可种()棵树 同学们在全长100米的小路一边植树,每隔5米栽一棵(只栽一端).一共需要多少棵树苗 一个圆形鱼塘的周长是270米,每隔9米种一棵杨树,每相邻的两棵杨树之间均匀地栽两棵柳树.栽了多少棵杨树?多 园林设计师傅打算在一个周长是150米的圆形花坛的周围每隔3米种一棵树,一共得准备多少棵树苗? 全长100米的小路植树,每隔5米栽一棵,两端要栽,一共要多少棵树苗 在一个周长是1200米的正方形池塘四周栽树,每隔10米栽一棵杨树,后来又在每两棵杨树之间又栽了2棵柳树. 一花坛周长60米,每5米种一棵树,共种几棵树 同学们在全长100米的小路一边植树,每隔5米栽一棵(两端要栽).一共需要多少棵树苗?方法怎么写. 等差数列:要在一周长400米的池塘周围等距离地在栽一些柳树,株距10米,再在每两棵柳树间栽3课杨树,在这个池塘周围共栽树多少棵 一个周长是78.5的圆形花坛,每隔两米种一棵树,最多种多少树?再说一下39.25是肯定不对的!40也不对!最好是整数。 李红在乘长途汽车旅行时,注意观察平直公路旁边的里程碑,并把对应的时刻记录了下来,数据如下表:里程李红在乘长途汽车旅行时,注意观察平直公路旁边的里程碑,并把对应的时刻记录了下 一个圆形广场的周长是100米,如果围着广场每隔10米种一棵树,一共要种几棵树? 一个圆形的花坛周长是20米,如果每隔5米种一棵树,那么一共可以种多少棵树? 某同学在乘长途汽车旅行时,注意观察公路旁的里程碑,并把观察的结果记录在下面表格中.表格如下:观察次数:1 2 3 4 5里程碑示数:10km 20km 30km 40km 50km观察时间:6:30 6:45 7:05 7:25 7:421、在6时30 周长为300米环形,每隔3米种一棵树,栽倒30颗树后接到通知改成每隔5米栽一个树后接到通知改成每隔5米载一棵问可以载多少颗树 一个圆形草地它的周长是480米沿着它的周长每隔六米种一棵树在在两棵树之间发两盆花一共放多少盆花 一同学在乘长途客车旅行时,注意到平直公路旁的里程碑,并把对应时间记录下来,数据如下表所示,回答问题┌——————┬—————┬—————┬—————┬—————┬————— 公园里湖的周长是2100米,围湖每隔14米种一棵树,要种几棵树? 在圆形的水池边,每隔3米种一颗树,共种树60棵,这个水池的周长是多少米? 某同学在乘长途汽车旅行时,注意观察公路旁的里程碑,并把观察的结果记录在下表中;里程碑数 10km 20km 30km 40 km 50 km 观察时刻 6:30 6:45 7:00 7:20 7:39 (1)汽车在总时间内的平均速度是多少?(2 一个圆形池塘,它的周长是27米,每隔3种一棵树,共需要几棵? 一个圆形水池的周长是12.56米,它的占地面积是多少平方米? 植树队在路的两旁种树,路的两端都种子树,一共种了300棵,树与树之间的间隔是5米,这条路长多少米? 周长为300米环形,每隔3米种一棵树,后接到通知改成每隔5米栽一个树,问可以载多少数题目叙述的不完整 是栽倒30颗树后接到通知改成每隔5米栽一个树,问可以载多少数 一个圆形水池的周长是62.8米,这个水池占地面积是多少平方米? 农民伯伯在公路两旁种树,树与树之间的距离是3.8米.已知两边共栽了300棵树.这条公路长多少千米?(公路的两端都要种树.)快,我现在就要,答得好我额外给 关于两棵大树围着一棵小树的作文.450字 一个圆形水池的周长是25.12米,这个水池占地面积是多少平方米? 农民伯伯在公路两旁种树,树与树之间的距离是3.8米.已知两边共栽了300棵树.这条公路长多少千米?(公路的两端都要种树.我现在就要,答得好我额外给 两棵大树中间有一棵小树 一边有太阳 一边下雨 600字作文 一个圆形水池的周长是31.4米.现将这个圆形水池的直径扩大3分之2后,水池的面积比原来多多少平方米 一条长skm的公路两侧每隔acm就植一棵树,这条公路的两侧共植树多少 看图作文,两棵强壮的大树中间有棵矮小的小树 挖一个周长是56.52米的圆形水池,这个水池的占地面积是多少平方米 公路两旁种树,每隔5米种一次,则少21棵,每隔5.5米种一棵,则少1棵,求树苗数和急用!答案为199棵树 两棵大树之间相距250米,园林部门计划在两棵大树的中间补栽小树,便每两棵小树之间的距离是10米,一共要补栽多少棵小树? 在圆形的水池边,每隔3米种一棵树,共种树60棵,这个水池的周长是多少米? 今年植树节,同学们沿一段公路植树,每隔5米种1棵,则少21棵,每隔5.5米种1棵,则少1棵,求树苗棵数及公路长度 (用方程) 两棵大树中间有一棵小树 一边有太阳 一边下雨 题目该怎么起 在一个周长是400米的正方形水池边种树,每隔10米种一棵,共需种 几棵树,每边种了 在一条100米的小路旁植树101棵,不管怎么植,总有两棵树的距离不超过1米,为什么? 两棵大树之间相距250米,园林部门计划在两棵大树中间补栽小树,使每两棵小树之间的距离是10米.一共要补栽多少棵树 一条路长100米,在路的一边从头到尾每隔10米栽一棵树,一共要栽多少棵树 给一条路上植树,两棵树之间的距离和植树的棵树不成比例对吗? 两棵大树之间相距250米,园林部门计划在两棵大树中间补栽小树,使每两棵小树之间的距离是米,一共要补栽多少 在一条长100米的通路两侧,从头到尾每隔2米在一棵树,按2棵杨树,一颗柳树的规律栽植.杨树,柳树各占植树总棵要算式 我们在一条100米长的道路一侧种了52棵树,那一定有两棵树他们之间的距离不超过2米急 两棵大树之间相距160米,园林部门计划在两棵大树中间均匀地补栽39棵小树,每两棵小树相距多少米? 在一条长100米的路两侧,从头到尾每隔2米栽一棵树,按2棵杨树,1棵柳树的规律栽植,杨树,柳树各占植树总棵树的几分之几 在一条长100米的小路一旁植树101棵,不管怎么种,总有两棵树的距离不超过1米,为什么 两棵大树之间相距180米,园林部门计划在两棵大树中间栽44棵小树每两棵小树的间隔距 在一条长100米的甬路的两侧,从头到尾每隔2米栽一棵树,按2棵杨树,1棵柳树的规律栽.杨树,柳树各占植树总棵的几分之几? 在一条长100米的小路一旁种101棵树,证明不管咋么种,总有两棵的距离不过1米
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn