【高频面试题】java实现堆排序算法

目录

1.堆排序算法原理

1)构建初始堆

2)堆调整与排序

3)时间复杂度

2.java代码实现(可运行)


1.堆排序算法原理

1)构建初始堆

将待排序的数组元素构建成一个最大堆(或最小堆) 从最后一个非叶子节点开始,向上调整每个子树,使其成为一个最大堆。

2)堆调整与排序

将最后元素 与 堆顶值 交换,这样最大元素就在数组的末尾

堆调整将交换后的新堆顶元素向下调整,使其重新成为一个最大堆。 重复:持续进行以上步骤,直到堆的大小减少到1。

3)时间复杂度

每次调整的复杂度是 O(log n),共需要 n 次调整,所以总时间复杂度是 O(n log n)。

2.java代码实现(可运行)


public class HeapSort {public void HeapSort(int[] arr) {int length = arr.length;// 1. build heap//从 最后一个非叶子节点开始,向数组左边建立堆,直到跟节点,即数组【0】for (int i = length / 2 - 1; i >= 0; i--) {heapify(arr, length, i);}// 2. sortfor (int j = length - 1; j > 0; j--) {// 将最后元素 与 堆顶值 交换,这样最大元素就在数组的末尾swap(arr, 0, j);// 因为新的堆顶元素变更了,需要重新调整堆heapify(arr, j, 0);}}/*** 维护堆有序性** @param src* @param len* @param index*/private void heapify(int[] src, int len, int index) {int largest = index;int left = 2 * index + 1;int right = 2 * index + 2;// 更新最大节点的indexif (left < len && src[left] > src[index]) {largest = left;}if (right < len && src[right] > src[largest]) {largest = right;}// 说明 最大节点 已经不是index 索引的值if (index != largest) {//调整 父 子节点值,保证有序swap(src, index, largest);//继续调整堆,index = largestheapify(src, len, largest);}}private void swap(int[] arr, int src, int dst) {int temp = arr[src];arr[src] = arr[dst];arr[dst] = temp;}public static void main(String[] args) {HeapSort heapSort = new HeapSort();int[] a = {1, 34, 2, 5, 4, 17, 22};
//        int[] arr = {10, 7, 8, 6, 4, 2, 1, 3, 5, 9};heapSort.HeapSort(a);System.out.println(Arrays.toString(a));}}```

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/50739.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌搜索提取工具

谷歌搜索提取工具是指能够帮助用户从谷歌搜索引擎中提取所需信息的工具或插件。这些工具通常具有强大的数据抓取和分析能力&#xff0c;能够自动化地收集和处理搜索结果中的数据&#xff0c;从而为用户提供更加便捷和高效的信息获取方式。文本介绍专业工具<大镜山谷歌搜索大…

了解LR(逻辑回归)一

逻辑回归&#xff1a;一种强大的分类模型 逻辑回归&#xff08;Logistic Regression&#xff0c;简称LR&#xff09;是一种在统计学和机器学习中广泛应用的分类模型&#xff0c;尽管其名称中包含“回归”二字&#xff0c;但实际上它主要用于处理分类问题&#xff0c;特别是二分…

大模型深度神经网络(Deep Neural Network, DNN)

大模型深度神经网络&#xff08;Deep Neural Network, DNN&#xff09;是一种复杂的机器学习模型&#xff0c;其特点在于包含多个隐藏层&#xff0c;从而赋予模型强大的非线性表达能力和对复杂数据模式的学习能力。以下是对大模型DNN的详细介绍&#xff1a; 一、基本概念 深度…

el-table列的显示与隐藏

需求&#xff1a;实现 表字段的显示与隐藏。效果图 代码实现 写在前面 首先 我部分字段有自定义的排序逻辑&#xff0c;和默认值或者 数据的计算 所以是不能简单的使用 v-for 循环column 。然后 我需要默认展示一部分字段&#xff0c;并且 当表无数据时 提示不能 显示隐藏 …

Flink-CDC解析(第47天)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言1. CDC 概述1.1 什么是CDC&#xff1f;1.2 CDC的实现机制1) 基于主动查询的 CDC&#xff1a;2) 基于事件接收CDC&#xff1a; 前言 本文主要概述了Flink-CDC. …

双笼转子三相感应电动机的瞬态分析(3):定子绕组短接制动过程仿真分析

目录: 1. 概述 2. 定子绕组短接制动时端电压约束条件 3. 定子绕组短接制动的仿真研究 4. 结论 5. 参考文献 1.概述 制动是电机传动系统的重要问题之一,在工业生产中为了提高效率,许多生产机械都要求快速制动,实现准确停车,因此,对各种制动方法进行深入研究具有重要的…

人工智能驱动的光学检测技术可阻止假冒芯片

欢迎关注GZH《光场视觉》 在过去的60年里&#xff0c;半导体行业已经蓬勃发展&#xff0c;成为了一个价值5000亿美元的全球市场。然而&#xff0c;这个行业正面临着两大挑战&#xff1a;新芯片的严重短缺和假冒芯片的激增。这两个问题不仅带来了巨大的故障风险&#xff0c;还导…

idea启动项目报:the command line via JAR manifest or via a classpath file and rerun.

解决方案 1.打开Edit Configurations&#xff0c;进去编辑&#xff0c;如下&#xff1a; 笔记配置 2.选择Modfiy options,点击Shorten command line 3.在新增的Shorten command line选项中选择JAR manifest或classpath file 4.点击保存后即可

RK3588+MIPI+GMSL+AI摄像机:自动车载4/8通道GMSL采集/边缘计算盒解决方案

RK3588作为目前市面能买到的最强国产SOC&#xff0c;有强大的硬件配置。在智能汽车飞速发展&#xff0c;对图像数据矿场要求越来越多的环境下&#xff0c;如何高效采集数据&#xff0c;或者运行AI应用&#xff0c;成为刚需。 推出的4/8通道GMSL采集/边缘计算盒产品满足这些需求…

FastAPI 请求和响应

FastAPI 请求和响应 FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,与 Python 3.6+ 类型提示一起使用。它基于标准 Python 类型提示,使得开发过程既快速又简单。在 FastAPI 中,请求和响应的处理是非常直观和高效的。本文将详细介绍 FastAPI 中的请求和响应…

240727.学习日志——《大话数据结构》学习总结

课程介绍 《大话数据结构》&#xff08;溢彩加强版&#xff09;——程杰 著 课程目录 第 1 章 数据结构绪论 第 2 章 算法 第 3 章 线性表 第 4 章 栈与队列 第 5 章 串 第 6 章 树 第 7 章 图 第 8 章 查找 第 9 章 排序 课程笔记 https://www.yuque.com/u43365522/huqw7…

第五十一天 第十一章:图论part02 99.岛屿数量 深搜 99.岛屿数量 广搜 100.岛屿的最大面积

99.岛屿数量 深搜 其实就是求连通块的数量&#xff0c;理解两个容器的作用。 grid表示该位置是否为岛屿&#xff0c;vis表示该位置是否被标记过&#xff08;遇到一个没有遍历过的节点陆地&#xff0c;计数器就加一&#xff0c;然后把该节点陆地所能遍历到的陆地都标记上。&…

leetcode日记(51)不同路径Ⅱ

和上一道题&#xff08;无障碍物的最短路径&#xff09;很像&#xff0c;但事实上比上一题多了优化方法 根据上一题改的代码如下&#xff0c;添加了对障碍物的判定&#xff0c;如果有障碍物则将数组值设为0。 class Solution { public:int uniquePathsWithObstacles(vector&l…

Python3网络爬虫开发实战(4)数据的存储

文章目录 一、文本文件存储1. os 文件 mode2. TXT3. JSON4. CSV 二、数据库存储1. SQLAlchemy2. MongoDB3. Redis1) 键操作2) 字符串操作3) 列表操作4) 集合操作5) 有序集合操作6) 散列操作 4. Elasticsearch1) 检索数据&#xff1a;利用 elasticsearch-analysis-ik 进行分词2)…

【PyCharm】PyCharm 2024.1 的最新变化-代码补全与智能提示

目录 代码补全与智能提示 更智能的代码补全功能 基于机器学习的代码建议 上下文相关的代码片段推荐 全行代码补全支持 (JavaScript 和 TypeScript) 本地 ML 模型的全行补全 示例 示例 1: 基于上下文的代码建议 示例 2: 全行代码补全 详细对比示例 示例 3: 传统代码补…

[Vulnhub] Raven2 PHPMailer-RCE+MSQP:Mysql权限提升

信息收集 IP AddressOpening Ports192.168.101.160TCP:22,80,111,46606 $ nmap -p- 192.168.101.160 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.7p1 Debian 5deb8u4 (protocol 2.0) | ssh-hostkey: | 1024 26:81:c1:f…

数据结构 链式存储 +

int DeleteLinkList(LinkList *list, char *name); int ReviseLinkList(LinkList *list, char *name, DATATYPE data); int DestroyLinkList(LinkList *list); int InsertTailLinkList(LinkList *list, DATATYPE data); ​​​​​​​删除 修改​​​​​​​ 销毁 ​​​​​…

Anaconda +Pytorch安装教程

Anaconda Pytorch安装教程 Anaconda安装 小土堆的安装教程&#xff1a;PyTorch深度学习快速入门教程&#xff08;绝对通俗易懂&#xff01;&#xff09;【小土堆】_哔哩哔哩_bilibili Free Download | Anaconda 这里自己选一个文件夹安装即可 第一个红框表示添加图标到开始菜…

CentOS配置NTP服务

更改配置文件 [rootController ~]# vim /etc/chrony.conf 重启服务并设置为开机自启动 [rootController ~]# systemctl restart chronyd.service [rootController ~]# systemctl enable chronyd.service 在另一台CentOS测试 更改配置文件 [rootCompute ~]# vim /etc/chron…

magento2 安装win环境和linux环境

win10 安装 安装前提&#xff0c;php,mysql,apach 或nginx 提前安装好 并且要php配置文件里&#xff0c;php.ini 把错误打开 display_errorsOn开始安装 检查环境 填写数据库信息 和ssl信息&#xff0c;如果ssl信息没有&#xff0c;则可以忽略 填写域名和后台地址&#xff0…