排序算法——堆排序

devtools/2025/1/13 17:36:19/

什么是堆

堆就是一种特殊的二叉树,他有以下特点:

  • 堆中某个节点的值总是不大于或不小于其父节点的值;

  • 堆总是一棵完全二叉树。

 堆又可以分为大根堆和小根堆

大根堆:根节点最大,每个节点都小于或等于父节点

小跟堆:根节点最小,每个节点都大于或等于父节点

 堆的建立思想

以大根堆为例,每一个节点都当作是一个大根堆,我们通过维护每一个节点的堆结构进而将整个二叉树变成堆。由于叶子节点没有子节点,所有不需要对他维护。

代码实现 

//这里用数组来代替堆结构    
public void buildMapHeap(int []heap,int heapSize){//遍历没一个非叶子节点for(int i=(heapSize)/2-1;i>=0;i--){maxHeapify(heap,i,heapSize);}}public void maxHeapify(int []heap,int i,int heapSize){//左孩子索引int l=2*i+1;int r=2*i+2;//假设最大值的索引是父节点int maxVlue=i;if(l<heapSize&&heap[l]>heap[maxVlue]){ //(叶子节点不需要调整)&&()maxVlue=l;}if(r<heapSize&&heap[r]>heap[maxVlue]){ //(叶子节点不需要调整)&&()maxVlue=r;}if(maxVlue!=i){//交换让父节点值最大swap(heap,i,maxVlue);//由于调整的堆结构可能导致原来的子节点的堆结构发生改变//所有也要调整原来子节点的堆结构maxHeapify(heap,maxVlue,heapSize);}}public void swap(int heap[],int i,int j){int t=heap[i];heap[i]=heap[j];heap[j]=t;}

小根堆代码实现类似不在赘述 大家可以自己实现。

建立好大根堆后,堆顶就是数组里面最大的元素,如果要实现堆排序只需要每次移除这个堆顶元素,然后将堆尾元素替换,再重新以堆顶进行调整。


http://www.ppmy.cn/devtools/150196.html

相关文章

drawDB docker部属

docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问&#xff1a;http://192.168.31.135:3000/

【数据库】Unity 使用 Sqlite 数据库

1.找到需要三个 DLL Mono.Data.Sqlite.dllSystem.Data.dllsqlite3.dll 上面两个dll可在本地unity安装目录找到&#xff1a; C:\Program Files\Unity\Hub\Editor\2022.3.xxf1c1\Editor\Data\MonoBleedingEdge\lib\mono\unityjit-win32 下面dll可在sqlite官网下载到&#xff…

改进萤火虫算法之七:基于自适应机制的萤火虫算法(Adaptive Firefly Algorithm, AFA)

基于自适应机制的萤火虫算法(Adaptive Firefly Algorithm, AFA)是一种结合了萤火虫算法与自适应调整机制的优化算法。 一、基本原理 萤火虫算法是一种基于群体智能的优化算法,其灵感来源于自然界中萤火虫通过闪光进行信息交互和相互吸引的行为。而基于自适应机制的萤火虫算法…

【Unity3D】导出Android项目以及Java混淆

Android Studio 下载文件归档 | Android Developers Android--混淆配置&#xff08;比较详细的混淆规则&#xff09;_android 混淆规则-CSDN博客 Unity版本&#xff1a;2019.4.0f1 Gradle版本&#xff1a;5.6.4&#xff08;或5.1.1&#xff09; Gradle Plugin版本&#xff…

Scaling Laws:通往更大模型的路径

引言 在人工智能领域&#xff0c;尤其是大语言模型&#xff08;LLMs&#xff09;中&#xff0c;Scaling Laws&#xff08;扩展规律&#xff09;已成为理解模型大小、训练数据和性能关系的基石。扩展规律提供了一个数学框架&#xff0c;用于预测随着计算资源、数据集规模和模型…

逐笔成交逐笔委托Level2高频数据下载和分析:20250102

level2逐笔成交逐笔委托下载 链接: https://pan.baidu.com/s/1p7OOj5p-QGFrWkt6KKoYng?pwd7f4g 提取码: 7f4g Level2逐笔成交逐笔委托数据分享下载 通过Level2逐笔成交和逐笔委托这种每一笔的毫秒级别的数据可以分析出很多有用的点&#xff0c;包括主力意图&#xff0c;虚假动…

STM32Flash读写BUG,坑—————4字对齐

在 STM32 的 Flash 存储中&#xff0c;数据通常需要 4 字节对齐&#xff0c;这是由于其 Flash 存储的硬件设计和写入操作的限制决定的。 以下是更详细的原因与解释&#xff1a; 1. STM32 的 Flash 写入单位 STM32 的 Flash 通常以字&#xff08;Word&#xff0c;4 字节 32 位…

AR 眼镜之-拍照/录像动效切换-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 拍照/录像动效切换 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;第一阶段动效 2&#xff09;第二阶段动效 2. &#x1f4a0; 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…