JavaInterview
  • README
  • 架构篇
    • 分布式一致性协议
    • 设计模式
    • ElasticSearch
    • MySQL
    • Redis
    • UML 图总结
  • 大数据篇
    • Hadoop 架构
    • Hive
    • Hive 函数
    • kafka_1
    • MaxList以及Set模块
  • 书籍总结
  • 代码篇
    • 动态规划(Dynamic Programming)
    • order_print_num
  • IO 篇
    • 多线程 N 次写文件
    • 多线程、进程、多核 CPU 详细介绍
  • Java 基础知识
    • 异常介绍
    • StringBuffer 和 StringBuilder
    • 线程池
    • 数据结构篇
      • BlockingQueue 和 BlockingDeque 内部实现分析
    • Java8
    • 关键字篇
      • 关键字-transient
      • 关键字-volatile
  • 深入浅出 JVM
    • garbage_collectors
    • JVM 参数
  • README
  • machinelearning
    • model
    • 推荐系统整理
    • tensorflow 入门
  • 排序篇
    • 冒泡排序
    • 基数排序
    • 选择排序
    • 插入排序
    • 希尔排序
    • 归并排序
    • 快速排序
    • 堆排序
    • 计数排序
    • 桶排序
  • Web 篇
    • JavaWeb 中 POJO、BO、VO、DO、DTO、DAO、PO 详细介绍
    • Filter 和 Interceptor 详解
    • HTTP 请求的完整过程
    • Spring 配置
    • Spring IoC
    • Spring 全家桶
Powered by GitBook
On this page
  • 1. 算法步骤
  • 2. 动图演示

Was this helpful?

  1. 排序篇

堆排序

Previous快速排序Next计数排序

Last updated 5 years ago

Was this helpful?

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

  1. 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;

  2. 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;

堆排序的平均时间复杂度为 Ο(nlogn)。

1. 算法步骤

  1. 创建一个堆 H[0……n-1];

  2. 把堆首(最大值)和堆尾互换;

  3. 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;

  4. 重复步骤 2,直到堆的尺寸为 1。

2. 动图演示

动图演示