数据结构与算法系列之堆排序

news/2025/2/28 6:32:50/

在这里插入图片描述

💗 💗 博客:小怡同学
💗 💗 个人简介:编程小萌新
💗 💗 如果博客对大家有用的话,请点赞关注再收藏 🌞

堆的概念和结构

如果有一个关键码的集合K = { , , ,…, },把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中,并满足: <= 且 <= ( >= 且 >= ) i = 0,1,2…,则称为小堆(或大堆)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
//堆中某个节点的值总是不大于或不小于其父节点的值;
//堆总是一棵完全二叉树

在这里插入图片描述

在这里插入图片描述

堆的实现

堆的向上调整

使用场景:建堆,堆的插入
建堆时间复杂度O( N*logN)

void AdjustUp(int* a, int child)
{int parent = (child - 1) / 2;while ( child > 0 ){if (a[parent] < a[child]){swap(&a[parent], &a[child]);child = parent;parent = (child - 1) / 2;}else{break;}}
}

堆的向下调整

使用场景:建堆,堆的删除,堆的排序
建堆时间复杂度O(N)

void AdjustDown(int* a,int parent,int n)
{for(int child = parent * 2 + 1; child <n; child=child*2+1){if (child + 1 < n && a[child] <  a[child + 1]){child++;}if (a[child] > a[parent]){swap(&a[child], &a[parent]);parent = child;}else{break;}}
}

堆的创建和堆的排序

`void HeapSort(int* a, int n)
{int end = n - 1;//向上建堆for (int i =0 ; i < n; i++){AdjustUp(a, i);}//向下建堆/*for (int i = (end - 1) / 2; i >= 0 ;i--){AdjustDown(a, i, n);}*while (end>=1){swap(&a[0], &a[end]);AdjustDown(a, 0,end);end--;}
}

习题:求前K个最大或最小的元素(数量多的情况下)

void AdjustUp(int* a, int child)
{int parent = (child - 1) / 2;while ( child > 0 ){if (a[parent] > a[child]){swap(&a[parent], &a[child]);child = parent;parent = (child - 1) / 2;}else{break;}}
}void AdjustDown(int* a,int parent,int n)
{int child = parent * 2 + 1;for(int child = parent * 2 + 1; child <n; child=child*2+1){if (child + 1 < n && a[child]  > a[child + 1])//这里注意大小堆的区别 小堆选小 大堆选大{child++;}if (a[child] < a[parent]){swap(&a[child], &a[parent]);parent = child;}else{break;}}
}void HeapSort(int* a, int n,int k)
{int end = n - 1;//向上建堆int i = 0;for (i =0 ; i < k; i++){AdjustUp(a, i);}//向下建堆/*for (int i = (end - 1) / 2; i >= 0 ;i--){AdjustDown(a, i, n);}*///求前k个最大数建k次小堆,与小堆堆顶相比,//比堆顶大就向下调整while (i < n){if (a[0] < a[i]){swap(&a[0], &a[i]);AdjustDown(a, 0, k);}i++;}
}

在这里插入图片描述


http://www.ppmy.cn/news/227589.html

相关文章

进出口跨境电商软件平台系统开发,源码技术架构

一、进出口跨境电商软件平台系统开发需做好相应的前期准备&#xff0c;如确定市场、了解政策、推广宣传等。 欢迎名片沟通探讨 确定目标市场&#xff1a;选择合适的目标市场。需要了解目标市场的消费习惯、政策法规以及竞争情况。 了解海关相关政策&#xff1a;针对不同国家或…

高校学生公寓数字化安全用电管理系统解决方案

摘要 本文针对高校学生公寓用电特点,从安全用电角度提出了一套集用电管理、计量、恶性负载智能识别控制、实时跟踪检测等功能于一体的数字化安全用电管理系统技术解决方案———学生公寓智能控电管理系统。 关键词:公寓恶性负载安全用电智能系统 0、引言 近年来,为了响应国…

品牌京东联盟,轻享智能养生,京选大牌家电献礼母亲节

身处科技时代&#xff0c;轻享养生之心&#xff01;熬夜加班、工作压力大、长时间作息不规律已经成为了许多人的常态&#xff0c;“轻养生”已经成为了时下的热门话题&#xff0c;传统养生文化回归&#xff0c;现代科技力量加持&#xff0c;一场由倍轻松、添可、海尔、摩飞、洁…

品牌京东联盟,轻享品质生活,母亲节送礼清单看过来!

身处科技时代&#xff0c;轻享养生之心&#xff01;熬夜加班、工作压力大、长时间作息不规律已经成为了许多人的常态&#xff0c;“轻养生”已经成为了时下的热门话题&#xff0c;传统养生文化回归&#xff0c;现代科技力量加持&#xff0c;一场由倍轻松、添可、海尔、摩飞、洁…

极端热浪席卷欧洲,高温冲至47度!欧洲市场将迎来哪些机遇?

最近一段时间&#xff0c;欧洲各国高温天气持续。多国气象部门已经发布高温预警&#xff0c;并预测最高气温甚至将超过40摄氏度。 世界气象组织警告&#xff0c;这种高温天气未来或成欧洲夏季“标配”&#xff0c;高温等气候变化负面影响将至少持续至本世纪60年代。 欧洲突破…

智能家居为什么跑不出“独角兽”?

受AIoT、5G等风口刺激&#xff0c;智能家居这些年越来越火。 近日&#xff0c;由新世界集团独家战略投资的智能家居品牌“LifeSmart云起”宣布完成C1轮融资&#xff0c;新世界集团持股占比4%。 从互联网科技企业小米、华为、苹果到传统家电企业美的海尔智家再到房产大佬碧桂园…

谁能挑起“全屋智能”的大梁?短期小米不败,长期华为可期

文|智能相对论&#xff08;aixdlun&#xff09; 作者|佘凯文 日前&#xff0c;在发布极狐阿尔法S后&#xff0c;华为又公布了一款新车“赛力斯华为智选SF5”&#xff0c;一并公开的还有售价&#xff0c;两驱版21.68万&#xff0c;四驱版24.68万&#xff0c;宣布将于5月批量交…

​做让用户安心合规的智能家居产品——智能家庭用户个人信息保护方案

说起家电行业&#xff0c;海尔是大家耳熟能详的大企业&#xff0c;在智能家居行业&#xff0c;有着丰富的探索和实践&#xff0c;第三届SCA智能家居信息安全大会上&#xff0c;海尔标准与知识产权部总监王淼做了“做让用户安心&#xff0c;合规的智能加家居产品——智慧家庭用户…