当前位置: 首页 > java >正文

重温经典算法——堆排序


版权声明

  • 本文原创作者:谷哥的小弟
  • 作者博客地址: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.xdnf.cn/news/10611.html

相关文章:

  • 九(1). 引用作为函数参数的使用
  • DDR5舍入定义和算法Rounding Definitions and Algorithms详细讲解
  • 第17讲、odoo18可视化操作代码生成模块
  • L2-054 三点共线 - java
  • 【LeetCode】数组|枚举|数学题型刷题汇总
  • 头像预览和上传
  • 第一章:计算机系统概论
  • Y1——链式前向星
  • 在 Linux 服务器上无需 sudo 权限解压/打包 .7z 的方法(实用命令)
  • 21-CS61B-lab6:java文件操作以及持久化一见
  • BiliNote简介
  • 第100期 DL,多输入多输出通道
  • 学习STC51单片机25(芯片为STC89C52RCRC)
  • edg浏览器打开后默认是360界面
  • 某电子计数跳绳的一次修复经历
  • abandon便签:一个免费好用审美在线的桌面便签应用
  • python打卡day43
  • 【Python序列化】TypeError: Object of type xxx is not JSON serializable问题的解决方案
  • 分词算法BBPE详解和Qwen的应用
  • day 40 python打卡
  • Spring框架学习day6--事务管理
  • 【ISAQB大纲解读】信息隐藏指的是什么
  • 基于Qt的app开发的过渡期
  • PH热榜 | 2025-06-01
  • Flex弹性布局
  • langGraph多Agent
  • 【C语言入门级教学】冒泡排序和指针数组
  • ShardingSphere 分片策略深度解析
  • 导入典籍数据
  • 《仿盒马》app开发技术分享-- 购物车业务逻辑完善(端云一体)