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

Java:堆排序

1.步骤

先确定数组是升序排序或是降序排序。若是升序,则将数组创建为大根堆,降序则创建为小根堆。这里以升序为例。

第一步:将数组创建为大根堆。同时设置 usedSize == arr.length;

第二步:此时根为最大值,将根与最后的值进行对换,并 usedSize--;

第三步:将新的 usedSize 个元素用向下调换的方法重新排为大根堆。

第四步:如此重复至 usedSize == 0; 此时 arr 排序完成

2.代码

    // 堆排序public static void heapSort(int[] array) {// write code  herecreateHeap(array);int end = array.length - 1;while (end > 0) {swap(array, 0, end);siftDown(array, 0, end);end--;}}private static void createHeap(int[] array) {for (int parent = (array.length - 1 - 1) / 2; parent >= 0; parent--) {siftDown(array, parent, array.length - 1);}}private static void siftDown(int[] array, int parent, int end) {int child = 2 * parent + 1;while (child < end) {if (child + 1 < end && array[child] < array[child + 1]) {child++;}if (array[parent] < array[child]) {swap(array, parent, child);parent = child;child = 2 * parent + 1;} else {break;}}}

http://www.xdnf.cn/news/8638.html

相关文章:

  • Git教程
  • 龙虎榜——20250523
  • 地形生成原理与实现
  • 【Java】Java元注解
  • 【操作系统】-4.1.8文件共享
  • Unitree 5. GO1 3D打印配件
  • 高通usecase理解
  • 【三维重建】【3DGS系列】【深度学习】3DGS的理论基础知识之如何形成高斯椭球
  • 【递归、搜索与回溯算法】专题三:穷举vs暴搜vs深搜vs回溯vs剪枝
  • 第十节第八部分:Lambda表达式、Lambda表达式的省略规则
  • YOLOV11网络图和数据增强
  • PotPlayer 4K 本地万能影音播放器
  • 基于厚度变化的分割点定位算法:以瓶口颈部为例
  • 【分组背包 数论】P12160 [蓝桥杯 2025 省 Java B] 2 的幂|普及+
  • MySQL 第五讲---基础篇 表的约束
  • 每个元素后面加“、”,但最后一个元素不加
  • 点云处理的瑞士军刀PCL几何库
  • 基于Java(GUI)实现五子棋
  • 【AI】小参数,大影响:从OpenAI参数看AI开发挑战
  • Python打卡训练营学习记录Day34
  • 文章记单词 | 第104篇(六级)
  • MySQL --- 事务
  • 【Linux系列】EVS 与 VBD 的对比
  • 文章记单词 | 第103篇(六级)
  • 永磁同步电机参数辨识算法--拓展卡尔曼滤波参数辨识
  • 探索微观世界的“度量衡”:显微测量仪器解析
  • 《C++20新特性全解析:模块、协程与概念(Concepts)》
  • Python包管理器:uv
  • 目前,Navicat 17.1 版本的用户管理功能无法使用,如何回退到上一个版本?关于之前提到的转置功能?
  • Three.js 中的 Octree(八叉树)详解