重温经典算法——堆排序

article/2025/7/2 13:13:57

版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址:http://blog.csdn.net/lfdfhl

在这里插入图片描述

基本原理

堆排序是一种基于二叉堆的排序算法,时间复杂度为O(n log n)。堆排序核心步骤包括构建最大堆和反复取出堆顶元素排序:首先从最后一个非叶子节点开始调整构建最大堆,然后将堆顶元素与末尾元素交换,并重新调整剩余元素为新堆。该算法时间复杂度 O(n log n),空间复杂度 O(1)。

代码实现

import java.util.Arrays;public class HeapSort {public static void heapSort(int[] arr) {int n = arr.length;// 构建最大堆(从最后一个非叶子节点开始调整)for (int i = n / 2 - 1; i >= 0; i--) {heapify(arr, n, i);}// 逐个取出堆顶元素(最大值)并调整堆for (int i = n - 1; i > 0; i--) {swap(arr, 0, i);    // 将堆顶元素交换到数组末尾heapify(arr, i, 0); // 调整剩余元素为新堆}}private static void heapify(int[] arr, int n, int i) {int largest = i;        // 假设当前节点为最大值int left = 2 * i + 1;   // 左子节点索引int right = 2 * i + 2;  // 右子节点索引// 找到左、右子节点中的最大值if (left < n && arr[left] > arr[largest]) largest = left;if (right < n && arr[right] > arr[largest]) largest = right;// 若最大值不是当前节点,交换并递归调整子树if (largest != i) {swap(arr, i, largest);heapify(arr, n, largest);}}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String[] args) {int[] arr = {4, 10, 3, 5, 1};heapSort(arr);System.out.println("Sorted array: " + Arrays.toString(arr));// 输出:Sorted array: [1, 3, 4, 5, 10]}
}

http://www.hkcw.cn/article/HVnZydSdkp.shtml

相关文章

PyTorch——卷积层(3)

conv_arithmetic/README.md at master vdumoulin/conv_arithmetic GitHub out_channel1 out_channel2

5.29 自学测试 Linux基础 Day4

一、Linux操作系统介绍 1.操作系统介绍&#xff1a; 管理计算机硬件与软件资源的计算机程序&#xff0c;同时也是计算机系统的内核与基石。 2.常见的操作系统 桌面操作系统&#xff1a;Windows系列、Linux、MacOS 嵌入式操作系统&#xff1a;Linux 服务器操作系统&#x…

推荐一款使用html开发桌面应用的工具——mixone

简介 mixone是开发桌面应用&#xff08;Win、Mac、Linux&#xff09;的一款工具、其基于electron实现。其拥有简单的工程结构。以为熟悉前端开发的程序员可以很轻松的开发出桌面应用&#xff0c;它比electron的其他框架更简单&#xff0c;因为那些框架基本上还需要了解electro…

leetcode hot100 二叉树(二)

书接上回&#xff1a;https://blog.csdn.net/weixin_74129837/article/details/148367615?spm1001.2014.3001.5501 8.验证二叉搜索树 维护一个min_val和max_val&#xff0c;限制当前结点的合法值范围。min_val和max_val动态变化。 class Solution { public:bool check(Tree…

【Linux】基础文件IO

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;Linux 前言 无论是日常使用还是系统管理&#xff0c;文件是Linux系统中最核心的概念之一。对于初学者来说&#xff0c;理解文件是如何被创建、读取、写入以及存储…

MYSQL MGR高可用

1&#xff0c;MYSQL MGR高可用是什么 简单来说&#xff0c;MySQL MGR 的核心目标就是&#xff1a;确保数据库服务在部分节点&#xff08;服务器&#xff09;发生故障时&#xff0c;整个数据库集群依然能够继续提供读写服务&#xff0c;最大限度地减少停机时间。 2. 核心优势 v…

【java面试】MySQL篇

MySQL篇 一、总体结构二、优化&#xff08;一&#xff09;定位慢查询1.1 开源工具1.2Mysql自带的慢日志查询1.3 总结 &#xff08;二&#xff09;定位后优化2.1 优化2.2 总结 &#xff08;三&#xff09;索引3.1 索引3.2 索引底层数据结构——B树3.3 总结 &#xff08;四&#…

头像预览和上传

在写一个项目的时候&#xff0c;遇到了头像修改这个功能的需求&#xff0c;在最开始的学习中发现可以通过type为file的input文件读取图片&#xff0c;然后将其转换为DataUrl格式&#xff0c;最终作为Ima元素的src即可在页面上展示图片。但到后面开始写交互的时候发现DataUrl格式…

解锁效率新高度:Agent Zero智能助手框架

探索Agent Zero AI框架&#xff1a;您的个性化智能助手 在迅速发展的科技世界&#xff0c;Agent Zero AI框架为我们揭开了一个全新的大门。被设计成能够与用户同步成长与学习的智能助手&#xff0c;Agent Zero展现了它作为个性化使用工具的非凡潜力。在本篇文章中&#xff0c;…

第43节:Vision Transformer (ViT)视觉领域的革命性架构

1. ViT的诞生背景与核心思想 Vision Transformer (ViT) 是2020年由Google Research团队提出的一种革命性计算机视觉架构,它将自然语言处理(NLP)领域中大获成功的Transformer模型引入到计算机视觉任务中。这一创新彻底改变了传统卷积神经网络(CNN)在视觉任务中的主导地位,为图…

leetcode0513. 找树左下角的值-meidum

1 题目&#xff1a;找树左下角的值 官方标定难度&#xff1a;中 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1 示例 2: 输入: [1,2,3,4,null,5,6,null,null,7]…

从webshell管理工具(蚁剑 冰蝎 哥斯拉 菜刀 哥斯拉等)程控制主机后,再将这个控制能力上线到MSF 为什么要这么做了?一篇文章告诉你

目录 一、为什么Webshell管理工具需要上线到Metasploit&#xff1f; 什么情况下需要上线到Metasploit&#xff1f; 二、常见Webshell管理工具及上线Metasploit的步骤 1. 蚁剑&#xff08;AntSword&#xff09;上线到Metasploit 上线步骤&#xff1a; 实际案例&#xff1a…

【Ragflow】24.Ragflow-plus开发日志:增加分词逻辑,修复关键词检索失效问题

概述 在RagflowPlus v0.3.0 版本推出之后&#xff0c;反馈比较多的问题是&#xff1a;检索时&#xff0c;召回块显著变少了。 如上图所示&#xff0c;进行检索测试时&#xff0c;关键词相似度得分为0&#xff0c;导致混合相似度(加权相加得到)也被大幅拉低&#xff0c;低于设定…

YOLOv5 :训练自己的数据集

- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/rnFa-IeY93EpjVu0yzzjkw) 中的学习记录博客** - **&#x1f356; 原作者&#xff1a;[K同学啊](https://mtyjkh.blog.csdn.net/)** 我们接着上一篇文章配置完YOLOv5需要的环境后&#…

【Unity】云渲染

1 前言 最近在搞Unity云渲染的东西&#xff0c;所以研究了下官方提供的云渲染方案Unity Renderstreaming。注&#xff1a;本文使用的Unity渲染管线是URP。 2 文档 本文也只是介绍基本的使用方法&#xff0c;更详细内容参阅官方文档。官方文档&#xff1a;Unity Renderstreamin…

每日一道面试题---ArrayList的自动扩容机制(口述版本)

首先&#xff0c;ArrayList是基于动态数组实现的&#xff0c;它的容量是可以动态增长的&#xff0c;ArrayList的默认容量是10&#xff0c;当我们向ArrayList中插入一个数据时&#xff0c;第一步&#xff0c;会先进行一个条件的校验操作&#xff0c;先去判断ArrayList是不是一个…

分布式锁优化:使用Lua脚本保证释放锁的原子性问题

分布式锁优化&#xff08;二&#xff09;&#xff1a;使用Lua脚本保证释放锁的原子性问题 &#x1f4bb;黑马视频链接&#xff1a;Lua脚本解决多条命令原子性问题 在上一章节视频实现了一个可用的Redis分布式锁&#xff0c;采用SET NX EX命令实现互斥和过期自动释放机制&…

B1、进度汇报(— 25/05/31)

本文档汇总了各成员在 2025 年 5 月 11 日 ~ 5 月 31 日完成的工作。我们遇到了进度问题&#xff08;收工后需反思&#xff09;&#xff1a; 本学期第十四周&#xff08;05/19 ~ 05/25&#xff09;有相当多课程需要提交实验结果或上台展示。本学期第十六周&#xff08;06/02 ~…

BUUCTF[极客大挑战 2019]Havefun 1题解

BUUCTF[极客大挑战 2019]Havefun 1题解 题目分析解题理解代码逻辑&#xff1a;构造Payload&#xff1a; 总结 题目分析 生成靶机&#xff0c;进入网址&#xff1a; 首页几乎没有任何信息&#xff0c;公式化F12打开源码&#xff0c;发现一段被注释的源码&#xff1a; 下面我们…

常见算法题目5 -常见的排序算法

常见算法题目5 -常见的排序算法 本文介绍常见的排序算法的思路及代码实现(都是按照从小到大排列)&#xff0c;包括冒泡排序、选择排序、插入排序、快速排序、归并排序、堆排序。 1.冒泡排序 思路&#xff1a;重复遍历数组&#xff0c;依次比较相邻元素&#xff0c;若顺序错误…