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

堆排序--自学笔记

堆排序

学习目标

1.堆结构

2.堆排序思想

3.代码实现

4.复杂度分析

1.堆结构

定义

符合以下两个条件之一的完全二叉树

  • 根节点的值 >= 子节点的值,称为最大堆,或大顶堆
  • 根节点的值 <= 子节点的值,称为最小堆,或小顶堆

2.堆排序思想

3.代码实现

/** * 堆排序 * @param arr */publicstaticvoidheapSort(int[]arr){//堆排序第一步:初始化堆//这里选择构建大顶堆:从小到大排序buildMaxHeap(arr);//取数字,调整 循环//取出堆顶数字:与数组末尾元素交换//数组长度-1for(inti=arr.length-1;i>0;i--){swap(arr,0,i);//i也可以代表数组中可用的数字maxHeapify(arr,0,i);}}/** * 初始化堆(大顶堆) * @param arr */privatestaticvoidbuildMaxHeap(int[]arr){//构建堆第一步:从最后一个非叶子节点开始进行三人组比赛//也可以从arr.length - 1 开始,但它没有左右子节点,也会运算到arr.length / 2 - 1for(inti=arr.length/2-1;i>=0;i--){//大顶堆化maxHeapify(arr,i,arr.length);}}/** * 大顶堆化 * @param arr * @param i * @param heapSize */privatestaticvoidmaxHeapify(int[]arr,inti,intheapSize){//找到左右子节点intl=2*i+1;intr=2*i+2;intlargest=i;//不能越界if(l<heapSize&&arr[l]>arr[largest]){largest=l;}if(r<heapSize&&arr[r]>arr[largest]){largest=r;}if(largest!=i){//需要发生交换swap(arr,i,largest);//发生了交换 则交换下来的元素需要继续下沉maxHeapify(arr,largest,heapSize);}}privatestaticvoidswap(int[]arr,inta,intb){inttemp=arr[a];arr[a]=arr[b];arr[b]=temp;}

4.复杂度分析

215. 数组中的第K个最大元素 - 力扣(LeetCode)

http://www.zskr.cn/news/137967.html

相关文章:

  • GEO优化公司优质推荐:这六家企业技术扎实,长期效果经得起考验 - 品牌企业推荐师(官方)
  • 8个AI论文生成平台测评,降重与写作功能深度解析
  • Paperzz AI PPT:把 “做 PPT 的苦”,变成 “选模板的爽”
  • 工业热成像数据增强不足 后来才知道加高斯噪声模拟设备老化
  • CC2530运行ZStack时的中断处理机制解析
  • 基于 FRP + 云服务器实现安全可靠的远程桌面连接
  • AI论文生成工具排行榜:8个优质网站推荐,涵盖降重与写作功能
  • 毕业季 “学术搭子” 清单:7 个 AI 工具,把论文焦虑按在地上摩擦
  • Java毕设项目:基于springboot的非物质文化遗产再创新系统设计与实现(源码+文档,讲解、调试运行,定制等)
  • 国内IT软考证报考流程及前期准备,一篇解读
  • 完整示例演示USB Burning Tool刷写失败排查方法
  • Qt 信号与槽机制深度解析
  • Java毕设选题推荐:基于springboot的旧物回收商城系统的设计与实现springboot废物回收管理商城【附源码、mysql、文档、调试+代码讲解+全bao等】
  • LACP协议小结
  • 全面讲解ESP32开发核心外设:GPIO控制基础教学
  • STM32CubeMX中文汉化环境下I2C配置流程通俗解释
  • 有源蜂鸣器和无源区分:手把手教你辨认方法
  • 2025年值得留意的10款AI论文生成平台,支持LaTeX模板与自动格式校对
  • 赋能成长型企业:SAP Business One与奥维奥的数字化共赢之道
  • dot1x和RADIUS认证
  • 共筑敏捷核心:SAP Business One与奥维奥的数字进化论
  • 做 简历时,模板比内容更费时间?10 个实用简历模板网站整理
  • C++——C/C++连接mysql数据库
  • 【数据分析】HST水平同步压缩变换【含Matlab源码 14755期】复现含文献
  • 微信小游戏分包(cocos自带分包)
  • nanoMODBUS 库
  • 【LangChain4J】Tools (Function Calling)工具调用
  • 基于RS-485的奇偶校验应用完整指南
  • Vue核心特性01,Vue 组件基础:从定义到使用的完整指南
  • vxe-table 按多个列进行分组和按多个字段进行分组的使用方式