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

堆排序-堆排序介绍及在Java如何实现最大堆排序方法

1、什么是堆排序

堆排序(英语:Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。它将待排序的数组构建成一个大顶堆或小顶堆。然后,通过不断将堆顶元素(最大或最小)与末尾元素交换并重新调整堆,使得数组逐渐有序。最后,当堆的大小减至1时,排序完成。堆排序的时间复杂度为O(nlogn),空间复杂度为O(1),具有稳定性和适用性广的优点。

2、堆排序原理

堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。

(1)用大根堆排序的基本思想

① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区

② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key

③由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-1]调整为堆。然后再次将R[1..n-1]中关键字最大的记录R[1]和该区间的最后一个记录R[n-1]交换,由此得到新的无序区R[1..n-2]和有序区R[n-1..n],且仍满足关系R[1..n-2].keys≤R[n-1..n].keys,同样要将R[1..n-2]调整为堆。

……

直到无序区只有一个元素为止。

(2)大根堆排序算法的基本操作:

①建堆,建堆是不断调整堆的过程,从len/2处开始调整,一直到第一个节点,此处len是堆中元素的个数。建堆的过程是线性的过程&


http://www.mrgr.cn/news/38970.html

相关文章:

  • 【Kubernetes】常见面试题汇总(四十五)
  • 任务提交:bsub
  • CHI trans简介--prefetch
  • P9241 [蓝桥杯 2023 省 B] 飞机降落
  • 【数据治理-设计数据标准】
  • RK3568的型号区分
  • 电瓶车常见电压数据 48v/60v/72v 说明
  • uniapp在线打包的ios后调用摄像头失败的解决方法
  • MetaMap工具深度解析
  • 文档翻译软件哪个好用?高效翻译看这里
  • 雷池 WAF 如何配置才能正确获取到源 IP
  • Meta Quest 3S
  • 普密斯在线图像测量仪:图像与测量的完美结合
  • 【运动控制】关于GPIO通用输入口的锁存功能
  • 各种 JIT(Just-In-Time) 编译器
  • 苏州 工业三维动画制作「世岩清上」一站式可视化营销服务商
  • 【Kubernetes】常见面试题汇总(四十六)
  • 从0学习React(4)---更新组件状态setState
  • STK中计算通信链路的有用链接
  • 【傻呱呱】ESXI挂载USB移动硬盘给黑裙扩容