堆排序(Heap Sort)的C语言实现
- 将无序序列建成大顶堆(小顶堆):从最后一个非叶子节点开始通过堆调整HeapAdjust()变成小顶堆或大顶堆
- 将顶部元素与堆尾数组交换,此是末尾元素就是最大值,顶部元素不满足堆,故要将顶部元素在剩余的i-1个元素中调整为堆
- 反复第2步。直至所有顶点被输出,序列变成从小到大的有序序列
C语言实现(编译器Dev-c++5.4.0,源代码后缀.cpp)
原创文章,转载请注明来自钢铁侠Mac博客http://www.cnblogs.com/gangtiexia
#include <stdio.h>
#include <stdlib.h>
#define ERROR -1
#define OK 1
#define TRUE 1
#define MAXSIZE 6
typedef int Status;
typedef int KeyType;
typedef char InfoType; typedef struct{
KeyType score;
InfoType name[];
}RedType; typedef struct{
RedType r[MAXSIZE+];
int length;
}SqList; Status initSqList(SqList &l){
l.length=MAXSIZE;
for(int i=;i<=l.length;i++){
printf("请输入第%d个同学的姓名:",i);
scanf("%s",l.r[i].name);
printf("请输入第%d个同学的分数:",i);
scanf("%d",&(l.r[i].score));
}
printf("初始化完毕");
}
/*
Name: 堆调整
Copyright: http://www.cnblogs.com/gangtiexia
Author: 钢铁侠
Date: 2015-12-12 21:05:20
Description: 参数1为要调整的无序序列,参数2为要调整的数据的位置,参数3为要调整的序列的长度
*/ Status HeapAdjust(SqList &l,int m,int n){
RedType rc=l.r[m];//rc为要调整的数据
int j;
for(j=*m;j<=n;j=j*){ //接着调整互换下来的l.r[j],l.r[j]也要和他的孩子们满足堆的要求
if(j<n&&l.r[j].score<l.r[j+].score) j++;
if(l.r[j].score<rc.score) break; //此时要调整的数据l.rc满足堆的要求,故此数据不进行调整,调整下一个数据。
l.r[m]=l.r[j];
m=j;
} //for循环完毕,m最终定位到rc需要放置的位置
l.r[m]=rc;
}
/*
Name: 创建大顶堆+堆排序
Copyright: http://www.cnblogs.com/gangtiexia
Author: 钢铁侠
Date: 2015-12-12 21:05:14
Description: 创建堆的过程实质就是堆调整的过程,堆排序实质就是反复将堆的顶部元素移到末尾的过程
*/ Status HeapSort(SqList &l){
int i;
for(i=l.length/;i>=;i--){ //从最后一个非叶子节点开始调整每一个子树
HeapAdjust(l,i,l.length);
}
for(i=l.length;i>;i--)
{
RedType temp=l.r[];
l.r[]=l.r[i];
l.r[i]=temp;
HeapAdjust(l,,i-);
}
} Status Traverse(SqList &l){
for(int i=;i<=l.length;i++){
printf("\n第%d位同学为%s,分数为%d",i,l.r[i].name,l.r[i].score);
}
}
int main(){
SqList L;
initSqList(L);
HeapSort(L);
Traverse(L);
return ;
}
堆排序(Heap Sort)的C语言实现的更多相关文章
- 数据结构 - 堆排序(heap sort) 具体解释 及 代码(C++)
堆排序(heap sort) 具体解释 及 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 堆排序包括两个步骤: 第一步: 是建立大顶堆(从大到小排 ...
- Python入门篇-数据结构堆排序Heap Sort
Python入门篇-数据结构堆排序Heap Sort 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.堆Heap 堆是一个完全二叉树 每个非叶子结点都要大于或者等于其左右孩子结点 ...
- 堆排序 Heap Sort
堆排序虽然叫heap sort,但是和内存上的那个heap并没有实际关系.算法上,堆排序一般使用数组的形式来实现,即binary heap. 我们可以将堆排序所使用的堆int[] heap视为一个完全 ...
- 算法----堆排序(heap sort)
堆排序是利用堆进行排序的高效算法,其能实现O(NlogN)的排序时间复杂度,详细算法分析能够点击堆排序算法时间复杂度分析. 算法实现: 调整堆: void sort::sink(int* a, con ...
- 堆排序Heap sort
堆排序有点小复杂,分成三块 第一块,什么是堆,什么是最大堆 第二块,怎么将堆调整为最大堆,这部分是重点 第三块,堆排序介绍 第一块,什么是堆,什么是最大堆 什么是堆 这里的堆(二叉堆),指得不是堆栈的 ...
- Java实现---堆排序 Heap Sort
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先讲解下什么是数据结构中的二叉堆. 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关 ...
- 小小c#算法题 - 7 - 堆排序 (Heap Sort)
在讨论堆排序之前,我们先来讨论一下另外一种排序算法——插入排序.插入排序的逻辑相当简单,先遍历一遍数组找到最小值,然后将这个最小值跟第一个元素交换.然后遍历第一个元素之后的n-1个元素,得到这n-1个 ...
- 数据结构与算法---堆排序(Heap sort)
堆排序基本介绍 1.堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序. 2.堆是具有以下性质的完全二叉树:每个 ...
- [Unity][Heap sort]用Unity动态演示堆排序的过程(How Heap Sort Works)
[Unity][Heap sort]用Unity动态演示堆排序的过程 How Heap Sort Works 最近做了一个用Unity3D动态演示堆排序过程的程序. I've made this ap ...
随机推荐
- C++排序
浅谈C++之冒泡排序.希尔排序.快速排序.插入排序.堆排序.基数排序性能对比分析(好戏在后面,有图有真相) 最近一段时间去武汉参加了N多笔试,在几次试题中都出现了排序.偏偏出现了我没怎么看的插入排序, ...
- Period II - FZU 1901(KMP->next)
题目大意:给你一个字符串 S ,N = |S|,如果存在一个 P (1<=P<=N),并且满足 s[i] = s[P+i] (i = {0...N-P-1} ),求出来所有的 P 然后输出 ...
- HDU--杭电--1241--Oil Deposits--广搜
Oil Deposits Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...
- SQLServer中使用索引视图(物化视图)
物化视图:以前用的普通的视图,普通视图就是一段逻辑语句,对性能没有任何的提升,也不能创建索引,而物化视图会把视图里查询出来的数据在数据库上建立快照,它和物理表一样,可以创建 索引,主键约束等等,性能会 ...
- Gradle 1.12 翻译——第十三章 编写构建脚本
有关其它已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或訪问:http://gradledoc.qiniudn.com ...
- Linux下生产者与消费者的线程实现
代码见<现代操作系统> 第3版. 为了显示效果,添加了printf()函数来显示运行效果 #include<stdio.h> #include<pthread.h> ...
- redis+keeplived分布式缓存
redis(三)redis+Keepalived主从热备秒级切换 博客分类: 分布式缓存Redis redis高可用Keepalived 一 简介 安装使用centos 5.10 Master 19 ...
- 代码讲解Android Scroller、VelocityTracker
在编写自定义滑动控件时常常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简介(二):实例详解onInterceptTouchEvent与 ...
- 第一篇:Power BI数据可视化概述
前言 "可视化之工具,可爱者甚蕃.统计学家独爱R,自Python来,世人盛爱matplotlib.余独爱Power BI之出微软而不染(免费),濯Office而不妖(够精简).......& ...
- 在cmd窗口下运行Java程序时无法找到主类的解决办法
我是Java的初学者,昨天在cmd窗口下运行一段Java程序时总是有问题,可以编译但无法执行. 也就是javac时正确,一旦java时就不对了,提示找不到或无法加载主类,经百度谷歌再加上自己的摸索终于 ...