堆排序(heapsort)

HeapSort 堆排序 基于伪代码实现 阅读详情

堆排序

堆排序是利用堆结构(特殊的完全二叉树)实现排序的算法,时间复杂度是O(nlogn)。堆排序不稳定。

原理

堆排序要构建一颗完全二叉树(存储在数组,详见: 二叉树的数组存储),这颗二叉树就是堆。堆有大堆和小堆两种(结构类似)。这里以大堆为例。
在最大堆中每个节点都比子节点大,根节点最大,每个分枝都是一个堆,叶子节点天然就是堆。
构成一个堆之后。然后取堆首-重新构建堆-再取… 元素按大到小依次取出(原地排序),完成排序。

这里写图片描述


示例代码如下:

public class Heapsort {
    void sort(int[] arr){
        //建堆,叶子节点已经是堆了,所以从非叶子节点开始建堆
        for(int i = arr.length/2-1; i >= 0; i--){
            create(arr, i, arr.length - 1);
        }

        //取出跟节点(最大)与最后一个节点交换,然后修正堆
        int i = arr.length-1;//i指向堆的末尾
        while(i > 0){
            int k = arr[0];
            arr[0] = arr[i];
            arr[i] = k;

            i--;//减小堆的规模,这样修正堆时,新的堆不包括刚取出的根节点。相当于不断取出最大的元素。依次形成序列(升序)

            create(arr, 0, i);
        }
    }
    //构建、维护堆 (大堆)
    //这里只考虑将给定节点调整到堆的合适位置
    void create(int[] arr, int start, int end){
        int node = start*2 + 1;//左子节点下标
        //如果有子节点则进入,没有就说明要操作的节点是叶子节点,直接结束
        while(node <= end){
            //在两个字节点中挑一个最大的,(如果是小堆,就挑最小的)
            if(node+1 <= end && arr[node+1] > arr[node]){
                node++;
            }
            //比较父节点和子节点,如果父节点大,说明堆是好的(不用交换),return。否则交换节点后向下迭代
            if(arr[start] >= arr[node]){
                return;
            }else{
                int k = arr[start];
                arr[start] = arr[node];
                arr[node] = k;

                //重新设置父子节点下标,向下迭代,直到构成堆。
                start = node;
                node = start*2+1;
            }
        }
    }
}
JAVA:实现HeapSort堆排序算法(附完整源码) 阅读详情

相关推荐

京东联盟h5st(3.1)加密参数逆向实战与反爬对抗策略

本文详细解析了京东联盟h5st(3.1)加密参数的逆向分析与实战破解过程。通过接口分析定位关键加密函数,拆解h5st结构并还原其基于SHA256和HMAC-SHA256的加密逻辑,最终使用Python集成JavaScript环境成功复现加密算法,并分享了应对反爬的频率限制、IP封禁及算法升级等对抗策略。

weixin_29246195的博客 1740

HeapSort堆排序原理与实现

HeapSort堆排序原理与实现   堆排序是比较重要的数据结构,其主要优点是通过排序二叉树的特性能够记录每个数之间的大小关系,以至于不需要重复比较,对于海量数据排序问题可以减少时间复杂度。 一、基本概念 (1)大根堆(大顶堆):对于一个堆(完全二叉树),根结点的值是比所有结点的值都大,其子树中根结点的值也比子树中其他值都大。大根堆可以获得由小到大的递增序列;其定义为: A[i]≥A[2∗i]A[i]\ge A[2*i] A[i]≥A[2∗i]A[i]≥A[2∗i+1] A[i]\ge A[2*i+1]A

夏栀的博客 1112

FPGA 上的 YOLOv8 实时目标检测:从模型优化到硬件加速全解析

本文全面解析了将YOLOv8目标检测模型部署到FPGA进行硬件加速的完整流程。通过模型裁剪、混合精度量化等优化手段,结合HLS设计专用计算引擎与数据流,实现了高能效比的实时推理。文章深入探讨了软硬协同部署、性能调试与优化技巧,为追求极致实时性与低功耗的边缘AI应用提供了从算法到硬件的实战指南。

weixin_29031161的博客 608

堆排序(heapsort)

#include <iostream> using namespace std; void swap(int arr[], int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } void heapify(int tree[], int n, int i) { if (i >= n) { ...

如梦山河的博客 182

【GLM5】手把手教你在openclaw中白嫖英伟达羊毛

openclaw很强,但是也很贵,每一次请求都会消耗大量的token。而英伟达平台正好可以白嫖免费的模型,于是,我们一拍即合。

Science prince的博客 3820

72、海洋地理信息系统:电子海图的全面解析

本文全面解析了海洋地理信息系统中的电子海图技术,从AIS数据的应用、电子海图数据的存储与显示,到电子导航的发展趋势和S-100通用水文数据模型的推广,系统地阐述了电子海图在现代航海中的核心作用及其未来发展方向。

hhh00的博客 253

FreeBSD中堆排序的实现heapsort

FreeBSD中堆排序的实现heapsort 源码:https://github.com/freebsd/freebsd/blob/master/lib/libc/stdlib/heapsort.c 使用文档:https://www.freebsd.org/cgi/man.cgi?query=heapsort&sektion=3&manpath=freebsd-release-po...

每一天都有新的希望 916

IDM 的免费替代品来了!这款开源下载器速度提升500%

💡分享一款开源的下载管理工具,支持多线程加速(最高提升500%)、队列管理、计划任务和浏览器集成,界面现代化且支持深色模式,跨平台支持Windows/Linux,是IDM的优秀替代方案🎈

XiaoqiangClub的博客 734

heapsort(堆排序)

#include&amp;amp;lt;cstdlib&amp;amp;gt; #include&amp;amp;lt;cstdio&amp;amp;gt; #include&amp;amp;lt;cstring&amp;amp;gt; #include&amp;amp;lt;vector&amp;amp;gt; using namespace std; int heapsize; int father(int i) { re

TSWorld 291

YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025

YOLO系列算法改进 | C3k2改进篇 | 融合MambaOut轻量化门控架构 | 纯卷积实现超越Mamba性能的同时兼顾极致轻量化与边缘部署效率 | CVPR 2025 (以YOLOv26最新目标检测模型为基础,利用C3k2_MambaOut创新模块进行改进)

2502_91881744的博客 224

Langchain cannot connect with Azure SQL Database

Langchain 无法连接到 Azure SQL 数据库

suiusoar 633

堆排序(heapsort)总结

在B站看了up主【正月点灯笼】的堆排序(heapsort) 虽然听得明明白白,但是自己复现的时候还是花了一个小时,自己写一遍加深印象&&对细节把握更深 up用C,我用python 作为一个记录型的帖子,大家想搞懂的话,还是建议点上面的链接去看大佬的视频 def heapify(tree, n, i): ''' 从节点i出发,往下一直做heapify操作: 16:35 heapify的任务:底层已经是稳定的堆了,但是tree[i]为根的二叉树不稳定,从上往下递归,完成p

VagetableOfPeng的博客 338

华为FusionCompute之计算虚拟化

华为FusionCompute之虚拟化

jks212454的博客 2452

堆排序 heapsort

堆排序 运行时间为O(n lg n) 原地排序算法:在任何时候,数组中只有常数个元素存储在输入数组之外。 堆排序利用了某种数据结构来管理算法执行中的信息——堆数据结构。 堆: (二叉)堆数据结构是一种数据结构,可以视为一颗完全二叉树。二叉堆有两种:最大堆、最小堆。 堆是用一维数组存储: 我们可以把堆想象成下图的样子:(尽管堆本质上是一个...

weixin_30826095的博客 129

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C++ 堆排序(HeapSort)

一、思路: (1)将数组arr[0~n-1]调整形成最大堆; (2)取堆顶点(即取最大值)放到数组arr[n-1]的位置,即将arr[0]与arr[n-1]交换位置; (3)调整arr[0]到arr[n-2]重新形成最大堆; (4)同理,取堆顶arr[0](即取最大值)放到数组arr[n-2]位置,即交换arr[0]与arr[n-2]位置; (5)重复以上步...

ChanJose的博客 787

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

堆排序heapsort

class __declspec(dllexport) HeapSort { public: HeapSort(int* a, int len); ~HeapSort(); void AdjustHeap(); private: int* array_; int length_; }; void swap(int* a, int* b) { int

mscdj的博客 215

堆排序(HeapSort)

本文主要介绍堆排序算法(HeapSort),堆排序像合并排序而不像插入排序,堆排序的运行时间为O(nlgn);像插入排序而不像合并排序,它是一种原地(in place)排序算法。在任何时候,数组中只有常数个元素存储在输入数组以外,这样,堆排序就把插入排序和合并排序的优点结合起来。        堆排序还引入了另外一种算法设计技术,利用某种数据结构(在此算法中为“堆”)来管理算法执行中的信息。堆数

指尖飞舞 2959

Heapsort 堆排序

Heapsort 堆排序 转载https://blog.youkuaiyun.com/qq_34840129/article/details/80638225的图解,讲得很清晰。 图解: 下面用图来解释堆排序的具体过程: 假设最初的无序的列表为[5,6,8,1,2,4,9],经过堆的初始化操作后得到的对堆结构如下: 然后开始进行堆排序,每次都交换堆顶和末尾元素,然后对堆顶元素进行一次向下筛选,带颜色区域为...

weixin_43973433的博客 207

python实现堆排序用类的方法_python实现堆排序(HeapSort)

python实现【堆排序】(HeapSort)算法原理及介绍堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法****。堆实质是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序**。算法过程描述将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;将堆顶元素R...

weixin_39614754的博客 126

堆排序 heapsort

#include <iostream> using namespace std; void heapify(int arr[], int n, int i) { int largest = i; int l = 2*i + 1; int r = 2*i + 2; if (l < n &...

u010969626的博客 218

堆排序(Heapsort)

把堆排序分成一个个小任务

m0_51218245的博客 973

二叉堆和堆排序Heapsort

二叉堆是一种数据结构。 ___________________________________________________________________________________________________________________________________ 堆:(二叉)堆数据结构是一种数组对象。它可以被视为一棵完全二叉树,树中每个结点与...

aian53516的博客 135

堆排序HeapSort

堆排序

xupeng1644的博客 694

堆排序算法(HeapSort)

堆排序算法(HeapSort):堆的概念及常见操作、堆排序算法思想、性能分析、代码实现(Java)

Lyhdreamer的博客 1118

堆排序 heapsort,heapify

https://www.bilibili.com/video/av47196993?from=search&seid=13434163170488006321 package zuosuanfa; import java.util.Arrays; public class heapsort2 { /** *buildHeap从最后一个叶子结点的parent开始构建...

byteyoung 529
上一篇: 基数排序(radixSort)
下一篇: cookie session 和登录验证
zhangwang010
博客等级 码龄10年 1粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值