/**
* 升序用大根堆,降序用小根堆
* 调整堆:从根节点开始向下调整堆
* ①先建立初始堆,从n/2-1(第一个非叶子节点)节点开始,将之看做根节点,向下调整堆,到根节点结束
* ②循环i from n-1 to 0,每次取出堆的最顶层根节点,即数组下标为0,然后与节点i交换,这样对于大根堆而言,最大值总是在后面,再从根节点开始调整堆
*/
public class HeapSort {
public static void main(String[] args) {
int[] a = { 26, 5, 77, 1, 61, 11, 59, 15, 48, 19 };
Sort(a);
}
//heapSort
public static void Sort(int[] a) {
int n = a.length;//取得数组总长度,及堆最大的序号
int temp = 0;
Display(a, "Before sort : ");
for (int i = n / 2 - 1; i >= 0; i--) {
Adjust(a, i, n);
Display(a, "create MaxHeap : ");
}
System.out.println("---------------------------------------");
for (int i = n - 2; i >= 0; i--) {
temp = a[i + 1];//取出最后一个元素
a[i + 1] = a[0];//取出第一个元素,即顶层根节点
a[0] = temp;//交换位置
Adjust(a, 0, i + 1);//调整堆
Display(a, "reCreate : ");
}
Display(a, "After sort : ");
}
/**
* 调整堆的方法
* @param a 要调整的数组,即堆
* @param i 调整的根节点,即起始位置
* @param n 要调整的终止位置
*/
public static void Adjust(int[] a, int i, int n) {
int j = 0;
int temp = 0;
temp = a[i]; //取出根节点
j = 2 * i + 1; //左孩子节点
while (j <= n - 1) {
if (j < n - 1 && a[j] < a[j + 1])//比较左右孩子,取出较大的孩子
j++;
if (temp >= a[j]) //如果根节点大于孩子节点则退出循环,不用调整
break;
a[(j - 1) / 2] = a[j];//较大的孩子节点值赋值给根节点
j = 2 * j + 1;//继续寻找左孩子
}
a[(j - 1) / 2] = temp;//将根节点赋值给最后一个空出来的节点
}
//打印堆内容
public static void Display(int[] a, String str) {
System.out.println(str);
for (int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
System.out.println();
}
}
相关推荐
银河麒麟高级服务器操作系统V10SP2(X86)PXE无人值守批量部署实战指南
本文详细介绍了银河麒麟高级服务器操作系统V10SP2(X86)PXE无人值守批量部署的实战指南。通过PXE网络引导技术,实现全自动化、高效率的系统部署,特别适用于企业级数据中心和国产化替代项目。文章涵盖基础环境准备、关键服务配置、Kickstart高级定制及部署测试等核心内容,帮助用户快速掌握批量部署技巧。
堆排序-Java版本
堆排序:堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆:堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构映射到数组中就是下面这个样子 该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: 大顶堆:.
channel || channelGroup || ctx.writeAndFlush()发送字符串消息客户端接收不到的原因
一、原因 网络上传播的数据都是字节(二进制数据)类型。我们如果直接向网络流里面写入一个对象(如:String对象),是无法传输的。只有将对象序列化(转换为可以传输的字节类型)之后,才可以进行传输。所以问题的根源就很清楚了,需要把字符串转换成字节进行传输。、 二、解决办法 1、手动序列化 服务端: channelGroup.writeAndFlush(Unpooled.copiedBuffer("【客户端】"+remoteAddress+"已下线"+format.format(new Date()), Cha
【179】Java实现堆排序
本文讲解了堆排序的实现方式。并且把堆排序和冒泡排序放在一起比较了效率。
Ascend C 算子开发遇到的问题及解决方法
在学习Ascend C算子开发进阶课程的时候,进行Ascend C自定义算子工程、算子调用等实验,在开发环境中遇到了一些问题,在这里记录一下。首先如果在启智社区CANN版本为6.3 ,要进行Ascend C算子开发,需要更新CANN版本。
新四化浪潮下,中年整车诊断工程师的黄金突围路
摘要 本文探讨了汽车电子诊断工程师在当前行业变革中的独特优势与发展路径。作者作为从业者指出,整车诊断岗位在汽车"新四化"浪潮中呈现"逆生长"特性:技术壁垒高、经验复利强、市场需求持续增长。中年工程师凭借丰富的案例积累和实战经验成为行业稀缺人才,薪资水平显著高于同龄段其他技术岗位。文章分析了四条职业发展路径(技术专家、技术管理、细分深耕、横向拓展),并警示了三大职业风险(执行层局限、技术停滞、成果沉淀不足)。最后提出具体建议,强调掌握UDS高阶、DoIP以太网诊断等核心技术的重要性,为中年技术人提供了清晰的职
java实现堆排序
从小到大排序: public class HeapSort{ /** * 判断i索引处的元素是否小于j索引处的元素 * @param heap 堆 * @param i 索引 * @param j 索引 * @return heap[i] < heap[j] */ private boolean less(Comparable[] heap, int i, int j){ return heap[i].com
SAR图像去斑(Despeckling)研究的主流开源数据集
这些数据集专门用于训练监督学习去斑模型,提供了配对的含斑SAR图像和对应的无噪声参考图像(Ground Truth)。这些数据集主要用于目标检测/识别,但包含原始SAR图像,可用于。由于缺乏真实无噪声SAR图像,许多研究采用。
数据结构-堆排序Java实现
堆排序的核心是构建和维护堆,确保最大(或最小)元素位于根节点,然后将根节点与数组末尾的元素交换,并逐渐减小堆的大小。在最大堆中,根节点的值是最大的,而在最小堆中,根节点的值是最小的。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。第一步是将这个数组构建成一个最大堆,确保堆的性质:每个父节点的值都大于或等于其子节点的值。堆化过程:从根节点开始,比较它与其子节点的值,如果子节点的值更大,则交换它们,然后继续堆化子节点。减小堆的大小,排除最后一个元素。
[STC32G144K246入门第一步]点亮LED
STC32G144K246是一款高性能32位8051单片机,集成了丰富外设资源,适用于工业控制和复杂算法处理。该芯片支持双模式内核,内置硬件加速器,提供246KB Flash和144KB SRAM存储空间。文章详细介绍了开发环境搭建步骤、寄存器配置方法,并给出了LED驱动示例代码,通过推挽输出控制P42口实现闪烁效果。虽然开发环境相比ARM存在不足,但通过合理配置仍可满足项目需求。该教程为开发者快速上手STC32G144K246提供了实用参考。
YOLOv12改进策略【卷积层】| 引入注意力卷积模块RFAConv,关注感受野空间特征 助力yolov12精度提升
RFAConv:创新空间注意力和标准卷积运算感受野空间特征是针对卷积核设计的,根据卷积核大小动态生成。以3×3卷积核为例,它由非重叠滑动窗口组成,每个窗口代表一个感受野滑块。
Java :堆排序的实现(结尾附完整源码)
堆排序是一种基于二叉堆的高效排序算法,时间复杂度为O(nlogn)。其核心思想是将待排序数组构建成大顶堆,然后反复交换堆顶与末尾元素,逐步缩小堆范围并重新调整堆结构,最终实现有序排列。算法实现分为三个关键步骤:1)构建初始大顶堆;2)交换堆顶与末尾元素;3)调整剩余元素维持堆性质。主要优势包括原地排序(空间复杂度O(1))和稳定的性能表现。示例演示了将数组[3,8,6,9,2,1,5,4,7]通过堆排序变为有序序列的过程。
ONNX Runtime C# YOLO全链路压测:从300ms到22ms的15个底层优化技巧
摘要:本文分享了工业质检场景下C#调用YOLOv8s ONNX模型的性能优化实战经验。原始单帧推理耗时300ms无法满足产线需求,通过全链路分析定位瓶颈(预处理85ms、推理180ms、后处理30ms)。重点优化措施包括:使用OpenCVSharp CUDA加速预处理(85ms→12ms),开启ONNX Runtime ALL级别图优化,选用TensorRT执行提供程序(180ms→22ms),以及优化内存管理和线程调度。最终实现单帧总耗时22ms±2ms,GPU利用率提升至85%,完整满足产线120块板/
Java实现堆排序和图解
堆排序:堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆。如下图: 同时,我们对堆中的结点按层进行编号,将这种逻辑结构...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
java实现堆排序_Java 实现堆排序
堆堆排序和合并排序一样,是一种时间复杂度为O(nlgn)的算法,同时和插入排序一样,是一种就地排序算法(不需要额外的存储空间)。堆排序需要用到一种被称为最大堆的数据结构,与java或者lisp的gc不一样,这里的堆是一种数据结构,他可以被视为一种完全二叉树,即树里面除了最后一层其他层都是填满的。也正是因为这样,树里面每个节点的子女和双亲节点的序号都可以根据当前节点的序号直接求出。Parent(i)...
IMSL CNL 7.0.0 (x86-64)Crack
IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件
堆排序(Heapsort)之Java实现
堆排序算法介绍 堆是一种重要的数据结构,为一棵完全二叉树, 底层如果用数组存储数据的话,假设某个元素为序号为i(Java数组从0开始,i为0到n-1), 如果它有左子树,那么左子树的位置是2i+1,如果有右子树,右子树的位置是2i+2,如果有父节点,父节点的位置是(n-1)/2取整。分为最大堆和最小堆,最大堆的任意子树根节点不小于任意子结点,最小堆的根节点不大于任意子结点。所谓堆排序就是利用堆这
jdk-8u144-linux-x64.tar.gz.
该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包
java 堆排序代码_java堆排序代码,堆排序实现
下面要给大家带来的就是和堆排序算法相关的内容,一起来看看如何java实现吧!先来看一下原始堆堆排序算法首先,构造出初始堆,从最后一个非叶节点开始调整,随后,选出叶子节点当中,比自己大的一个交换。假如,交换之后的叶子节点不满足堆,那么就继续进行调整。这里的话因为20和16交换之后导致了16不满足堆的性质,所以就要重新进行调整。在初始堆构造好了之后,再把堆头元素交换到堆尾。堆尾的元素已经是有序的,之后...
java实现堆排序(附带源码)
java实现堆排序(附带源码)
堆排序(Java实现)
堆排序的实现 堆排序的
堆排序及其Java实现
堆排序是一种基于堆数据结构的比较排序算法。堆是一种特殊的完全二叉树,分为最大堆(Max Heap)和最小堆(Min Heap)。在最大堆中,每个节点的值都大于或等于其子节点的值;在最小堆中,每个节点的值都小于或等于其子节点的值。堆排序利用了最大堆的性质来实现升序排序,利用最小堆的性质来实现降序排序。堆排序是一种高效的排序算法,其时间复杂度为O(n log n),且不需要额外的存储空间。通过本文的介绍和Java代码实现,相信你已经对堆排序有了更深入的理解。
Java实现堆排序
堆排序及图解 对于一个长度为n的数组R(n)={r[0],r[1],…,r[n-1]}。 大顶堆(最大堆):r(i)>=r(2i+1)且r(i)>=r(2i+2),堆顶元素必为最大值,用于升序; 小顶堆(最小堆):r(i)<=r(2i+1)且r(i)<=r(2i+2),堆顶元素必为最小值,用于降序。 堆排序主要包括两个过程:(1)构建堆(从最后一个非叶子节点开始,即序号为n...
【Java】堆排序代码实现
堆排序是简单选择排序的改进,我们先来简单介绍一个概念:堆。 堆的定义:n个元素的序列{k1 , k2 , … , kn},当且仅当满足下列关系时,称之为堆。 满足条件1,则称之为小顶堆;满足条件2,则称之为大顶堆。 堆排序要解决两个问题: (1)将n个元素的序列按关键字建成堆; (2)输出堆顶元素后,堆的调整。 堆排序代码实现如下: import java.util.Arra...
堆排序原理及Java实现
一、堆排序原理 堆(heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质: (1)堆中某个结点的值总是不大于或不小于其父结点的值。 (2)堆总是一棵完全二叉树。 将根结点最大的堆称为最大堆或大根堆,根结点最小的堆称为最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。 堆是非线性数据结构,相当于一维数组,有两个直接后继(即左右孩子节点)。 堆的定义如下:n个元素的序列{k1,k2,ki,…,kn},当且仅当满足下关系时,称之为堆。 .
堆排序java实现_堆排序之Java实现
堆排序思想:堆排序,顾名思义,就是基于堆。堆分为最大堆和最小堆,其实就是完全二叉树。最大堆要求节点的元素都要大于其孩子,最小堆要求节点元素都小于其左右孩子,两者对左右孩子的大小关系不做任何要求,其实很好理解。有了上面的定义,我们可以得知,处于最大堆的根节点的元素一定是这个堆中的最大值。其实我们的堆排序算法就是抓住了堆的这一特点,每次都取堆顶的元素,将其放在序列最后面,然后将剩余的元素重新调整为最大...
382



被折叠的 条评论
为什么被折叠?



