当前位置:网站首页>堆排序代码详解
堆排序代码详解
2022-07-04 22:17:00 【@风景邮递Yuan】
堆的图示
• 堆是一个完全二叉树;
• 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的 值。
左侧为大顶堆 右侧为小顶堆
下列代码建立的是大顶堆
#include "stdio.h"
# define MAXSIZE 10
typedef struct {
int r[MAXSIZE]; /* 用 于 存 储 要 排 序 数 组 */
int length ; /* 用 于 记 录 顺 序 表 的 长 度 */
}SqList ;
void swap ( SqList *L, int i, int j){ /* 交 换 L 中 数 组 r 的 下 标 为 i 和 j 的 值 */
int temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
void HeapAdjust(SqList* L,int s,int m){ /* 结构体L的位置,第一个判断的结点的位置s,结点的个数m */
int temp , j;
temp = L->r[s]; /* 传递给temp位置s上的值 */
for (j = 2*s;j <= m;j *= 2) { /* 比较位置s上和它的两个子孩子上的值 */
if (j < m && L->r[j] < L->r[j+1]) /* 先找到s的两个子孩子,找出子孩子中较大的值 */
++j; /* j表示较大子孩子的下表 */
if ( temp >= L->r[j]) /* 如果temp大 则 当前结构不变 */
break ; /* r[c] 应 插 入 在 位 置 s 上 */
L->r[s] = L->r[j]; /* 否则把最大值赋到s位置上 */
s = j; /* 为 L->r[s] = temp 做铺垫 */
}
L->r[s] = temp; /* 最后一步 */
}
void HeapSort(SqList* L){ /* 对顺序表L进行堆排序 */
int i;
for (i = L->length/2; i > 0; i--) /* 把 L 中 的 r 构 建 成 一 个 大 顶 堆 */
HeapAdjust (L,i,L->length) ; /* 传入结构体L的位置 第一个判断的结点的位置i 结点的个数length */
for(i=0;i<MAXSIZE;i++){ /* 查看堆化后的结果 */
printf("%d ",L->r[i]);
}
printf("\n");
for (i = L->length; i > 1; i--) {
swap (L, 1 , i) ; /* 把堆顶最大值放在数组最后面,i-1 后就不参与堆化过程了 */
HeapAdjust (L, 1 , i-1); /* 结构体L的位置,第一个结点的位置s,结点的个数m */
for(int j=0;j<MAXSIZE;j++){ /* 查看过程 */
printf("%d--",L->r[j]);
}
printf("\n");
}
}
int main(){
int i;
int a[9]={50,10,90,30,70,40,80,60,20}; /* 初始化 */
SqList L;
L.length=MAXSIZE-1; /* 关键: r[0]是不用的 而且 有效长度需要在基础上减 1 */
L.r[0]=9999999;
for(i=1;i<MAXSIZE;i++){
L.r[i]=a[i-1]; /* r[0]是不用的 */
}
for(i=0;i<MAXSIZE;i++){
printf("%d ",L.r[i]); /* 查看原本的排序 */
}
printf("\n");
HeapSort(&L); /* 进行堆化 */
for(i=0;i<MAXSIZE;i++){ /* 查看排序后结果 */
printf("%d ",L.r[i]);
}
return 0;
}
边栏推荐
- Domestic database chaos
- 30余家机构联合发起数字藏品行业倡议,未来会如何前进?
- Éducation à la transmission du savoir | Comment passer à un test logiciel pour l'un des postes les mieux rémunérés sur Internet? (joindre la Feuille de route pour l'apprentissage des tests logiciels)
- Enabling digital economy Fuxin software attends the BRICs high level Forum on Sustainable Development
- LOGO特訓營 第三節 首字母創意手法
- The proofreading activity of data science on the command line second edition was restarted
- How can the advertising system of large factories be upgraded without the presence of large models
- 凭借了这份 pdf,最终拿到了阿里,字节,百度等八家大厂 offer
- 特征缩放 标准化 归一化
- Easy to use app recommendation: scan QR code, scan barcode and view history
猜你喜欢
虚拟人产业面临的挑战
Huawei Nova 10 series released Huawei application market to build a solid application security firewall
With this PDF, we finally got offers from eight major manufacturers, including Alibaba, bytek and Baidu
Visual task scheduling & drag and drop | scalph data integration based on Apache seatunnel
Domestic database chaos
[acwing] solution of the 58th weekly match
Logo Camp d'entraînement section 3 techniques créatives initiales
Tla+ introductory tutorial (1): introduction to formal methods
安装人大金仓数据库
Enabling digital economy Fuxin software attends the BRICs high level Forum on Sustainable Development
随机推荐
Use blocconsumer to build responsive components and monitor status at the same time
PostgreSQL JOIN实践及原理
sobel过滤器
记录:关于Win10系统中Microsoft Edge上的网页如何滚动截屏?
Wake up day, how do I step by step towards the road of software testing
特征缩放 标准化 归一化
Business is too busy. Is there really no reason to have time for automation?
AscendEX 上线 Walken (WLKN) - 一款卓越领先的“Walk-to-Earn”游戏
【愚公系列】2022年7月 Go教学课程 003-IDE的安装和基本使用
Concurrent network modular reading notes transfer
LOGO特训营 第五节 字体结构与设计常用技法
POM in idea XML dependency cannot be imported
通过Go语言创建CA与签发证书
繁华落尽、物是人非:个人站长该何去何从
Google Earth Engine(GEE)——基于 MCD64A1 的 GlobFire 日常火灾数据集
Deveco device tool 3.0 release brings five capability upgrades to make intelligent device development more efficient
MySQL storage data encryption
Tla+ introductory tutorial (1): introduction to formal methods
Sqlserver encrypts and decrypts data
The proofreading activity of data science on the command line second edition was restarted