(笔记)堆排序

news/2023/11/28 16:59:08

堆排序

堆排序是一种高效的排序算法,其时间复杂度为 O(nlogn),其中 n 是要排序的元素数量。堆排序的核心思想是利用堆这种数据结构来实现排序操作。

算法步骤

  1. 将待排序序列构造成一个大顶堆。具体来说,从最后一个非叶子节点开始,对每个非叶子节点进行调整,使其满足大顶堆的性质,即父节点的值大于其左右子节点的值。
  2. 依次将堆顶元素(最大值)取出,放到待排序序列的末端,然后对剩余的堆进行调整,使其重新满足大顶堆的性质。
  3. 重复步骤 2 直到待排序序列中的所有元素都被取出。

代码实现

下面是使用 Java 实现堆排序的代码:

public 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--) {int temp = arr[0];arr[0] = arr[i];arr[i] = temp;heapify(arr, i, 0);}
}private void heapify(int[] arr, int n, int i) {int largest = i;int l = 2 * i + 1;int r = 2 * i + 2;if (l < n && arr[l] > arr[largest]) {largest = l;}if (r < n && arr[r] > arr[largest]) {largest = r;}if (largest != i) {int temp = arr[i];arr[i] = arr[largest];arr[largest] = temp;heapify(arr, n, largest);}
}

使用场景

堆排序适用于需要对大规模数据进行排序的场景,例如排序 10 万个整数。与其他 $O(nlogn)$ 的排序算法(如快速排序)相比,堆排序的优势在于不需要额外的存储空间,而且最坏情况下的时间复杂度也比较稳定。

需要注意的是,堆排序不适用于排序少量数据的场景,因为其时间复杂度常数比较大,不如插入排序、选择排序等简单排序算法。另外,在实际应用中,堆排序的常数因子比较大,常被其他排序算法所取代。


http://www.ppmy.cn/news/957193.html

相关文章

el-table找出当前单元格与对应的上下列的值

当前单元格与对应的上下列的值如果不相同就设置个红色边框 当前单元格与对应的上下列的值如果不相同就设置个红色边框 当前单元格与对应的上下列的值如果不相同就设置个红色边框 以下是示例代码&#xff0c;对tableData数据的name字段进行处理 如果当前name值与上一条数据的na…

伙伴云CEO戴志康:我们为什么要做伙伴云?

分享嘉宾&#xff1a;戴志康&#xff0c;伙伴云CEO 以下为演讲实录⬇⬇⬇ 01选择人更少的一条路&#xff0c;从B级走向A级 我一直想和大家交流一个话题&#xff0c;关于我们为什么要做伙伴云。既代表我自己&#xff0c;同时也代表我们团队的一些想法。 我是一个怀疑论者。大…

【免费】微信图片dat转jpg工具(自动区分JPG、PNG、GIF)

楼主之前为了完成一个课程项目&#xff0c;写的一个小程序&#xff0c;之前需要批量转换微信图片的时候&#xff0c;看cadn上有好多源码&#xff0c;但是楼主比较菜&#xff0c;不怎么会用&#xff0c;后来自己写了一个小程序解决普通人使用的痛点&#xff0c;下载下来exe可以直…

chatgpt赋能python:Python图片处理:让图像处理更简单

Python 图片处理&#xff1a;让图像处理更简单 作为一门强大的编程语言&#xff0c;Python 可以处理多种任务&#xff0c;其中之一是图形处理。Python 程序员可以使用各种库和工具&#xff0c;在不同的平台上进行图片处理、编辑和转换。在本文中&#xff0c;我们将讨论 Python…

chatgpt赋能python:Python处理照片-提高照片处理效率的神器

Python 处理照片 - 提高照片处理效率的神器 对于任何一个专业摄影师或是业余爱好者而言&#xff0c;照片的拍摄技巧虽然至关重要&#xff0c;但是照片的后期处理过程也是不能忽略的&#xff0c;尤其是对于大量照片的处理来说&#xff0c;这中间会花费大量的时间和精力。在这个…

使用ChatGPT完成分类、检测、分割等计算机视觉任务(Pytorch)

前言 ChatGPT是一个由OpenAI训练的大型语言模型&#xff0c;其知识涵盖了很多领域。 虽然ChatGPT表示它不能用于写代码&#xff0c;但是万一是它太谦虚了呢&#xff1f; 下面的文字均为ChatGPT给出的回答。 使用ChatGPT解决图像分类任务 我们需要一个PyTorch模型&#xff0…

【代码随想录 | Leetcode | 第八天】哈希表 | 有效的字母异位词 | 两个数组的交集 | 两数之和

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏&#xff0c;今天将为大家带来哈希法~有效的字母异位词 | 两个数组的交集 | 两数之和的分享✨ 目录 前言242. 有效的字母异位词349. 两个数组的交集1. 两数之和总结 242. 有效的字母异位词 ✨题目链接点这里 给定两个字符串…

1. Spring 核心与设计思想

目录 1. Spring 是什么&#xff1f; 1.1 什么是容器&#xff1f; 1.2 什么是 Ioc &#xff1f; 1.2.1 传统程序开发 1.2.2 解决传统开发的缺陷 1.2.3 控制反转式程序开发 1.2.4 IoC 的实现思想&#xff08;重点&#xff09; 1.3 理解 Spring Ioc 1.4 DI 概念说明 1. S…

和为 K 的子数组——前缀和+哈希

题目链接&#xff1a;力扣 注意&#xff1a;此题不能使用滑动窗口&#xff0c;因为数组中可能会出现负数。也就是说右指针向后移1位不能保证区间会增大&#xff0c;左指针向后移1位也不能保证区间和会减小。给定左右指针的位置没有二段性 已知sum[i]是从nums[0~i]的和&#x…

ROS:pluginlib

目录 一、前言二、概念三、作用四实际用例4.1需求4.2流程4.3准备4.4创建基类4.5创建插件4.6注册插件4.7构建插件库4.8使插件可用于ROS工具链4.8.1配置xml4.8.2导出插件 4.9使用插件4.10执行 一、前言 pluginlib直译是插件库&#xff0c;所谓插件字面意思就是可插拔的组件&…

为什么ChatGPT的用户体验如此强大

短短三个月的时间&#xff0c;OpenAI的应 ChatGPT就获得了大量的用户。人气的迅速上升导致一些人预测 ChatGPT 不仅会扰乱搜索引擎&#xff0c;还会扰乱电子学习、写作和编辑等领域。 该软件不仅是一个有趣的聊天机器人&#xff0c;您可以与之进行有趣的对话&#xff0c;而且还…

chatGPT相关内容记录3.28

1.写出用傅立叶数值法求解非线性偏微分方程中的波方程(wave equation)的Python代码 傅立叶数值法是一种求解偏微分方程的方法&#xff0c;它利用傅立叶变换将偏微分方程从时域转换到频域&#xff0c;然后求解频域中的方程&#xff0c;最后利用逆傅立叶变换得到时域中的解。 以…

AndroidStudio中添加翻译插件:Translation

背景 开发中经常要阅读源码等&#xff0c;就会涉及翻译&#xff08;特别是英语不好的在下&#xff09;&#xff0c;之前一直是复制到百度或者谷歌进行翻译。终于&#xff0c;偶然找到了一款好用的as内直接用的翻译插件。 安装流程 1. 安装插件 打开as&#xff0c;依次点击&am…

GPT 如此强大,我们可以利用它实现什么?

GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一种基于Transformer结构的预训练语言生成模型&#xff0c;由OpenAI研发。它可以生成高质量的自然语言文本&#xff0c;取得了很好的效果&#xff0c;被广泛应用于各个领域。以下是一些利用GPT实现的应用。 一…

第十二章:MULTI-SCALE CONTEXT AGGREGATION BY DILATED CONVOLUTIONS——通过膨胀卷积的多尺度上下文聚合

0.摘要 目前用于语义分割的先进模型是基于最初设计用于图像分类的卷积网络的改进。然而&#xff0c;像语义分割这样的密集预测问题在结构上与图像分类不同。在这项工作中&#xff0c;我们开发了一个专门为密集预测设计的新的卷积网络模块。所提出的模块使用膨胀卷积来系统地聚合…

kaggle新赛:学生摘要评估大赛赛题解析(NLP)

赛题名称&#xff1a;CommonLit - Evaluate Student Summaries 赛题链接&#xff1a; https://www.kaggle.com/competitions/commonlit-evaluate-student-summaries/ 赛题背景 摘要写作是所有年龄段学习者的一项重要技能。总结可以增强阅读理解能力&#xff0c;特别是在第二…

【AutoGPT】你自己运行,我先睡了—— ChatGPT过时了吗?

系列文章目录 【AI绘画】Midjourney和Stable Diffusion教程_山楂山楂丸的博客-CSDN博客 目录 系列文章目录 前言 一、AutoGPT是什么&#xff1f; 二、AutoGPT带来的利弊 三、AutoGPT和ChatGPT区别 四、未来 总结 前言 ChatGPT是否过时&#xff1f;AutoGPT的兴起&#…

用 ChatGPT 运行 Python,简直太棒了

最近&#xff0c;我一直在阅读一些关于ChatGPT的有趣文章。在一篇文章中&#xff0c;有人发明了一种新的语言&#xff0c;并让ChatGPT运行它。在另一篇文章中&#xff0c;有人在ChatGPT中运行一个虚拟机。后者启发我提出了下面这个问题。 你能在ChatGPT中运行一个交互式Python会…

【裸辞转行】是告别,也是新的开始

一年多了没有更新&#xff0c;是因为去年身体加心理因素辞职了&#xff0c;并且大概率不会再做程序员了&#xff0c;嗯。本来觉得可能再也不会打开 CSDN 了&#xff0c;想了想&#xff0c;还是来做个告别吧&#xff0c;任何事情都该有始有终才对。 回忆碎碎念 是在去年的 11 …

模拟实现优先级队列(堆)

1、这里采用向下调整建大根堆。 2、入队时将元素加入队尾&#xff0c;然后采用向上调整使入队后仍然保持为大根堆。 3、出队出的是优先级高的元素&#xff0c;先将要出队的元素与队尾元素互换&#xff0c;然后usedSize–&#xff0c;采用向下调整使出队后仍然保持为大根堆。 p…
最新文章