排序算法 - 堆排序

文章目录

目录

文章目录

前言

1 . 堆排序原理

2 . 堆排序实现 

总结


前言

大家好,今天给大家介绍一下常见排序算法中的堆排序(填坑)


1 . 堆排序原理

堆排序是一种基于二叉堆数据结构的排序算法,它利用堆的性质进行排序。堆是一种完全二叉树,分为最大堆和最小堆两种类型。在堆排序中,通常使用最大堆进行排序。

堆排序的基本思想如下:

  1. 将待排序的序列构建成一个最大堆。
  2. 交换堆顶元素(最大元素)和堆中最后一个元素,然后将剩余元素重新调整为最大堆。
  3. 重复以上步骤,直到所有元素都被取出,最终得到一个有序序列。

具体建堆操作请访问http://t.csdnimg.cn/FMnMP介绍的很详细,不再过多赘述了

2 . 堆排序实现 

import java.util.Arrays;/*** 堆排序*/
public class HeapSort {private static final int[] array = { 27,15,19,18,28,34,65,49,25,37 };/*** 左子节点: 2*i  右字节点 2*i+1* @param args*/public static void main(String[] args) {sort();System.out.println(Arrays.toString(array));}public static void sort(){createHeap();System.out.println(Arrays.toString(array));for(int i = 0; i<array.length; i++){swap(0,array.length-i-1);HeapAdjust(0,array.length-1-i-1);}}public static void createHeap(){for(int i = array.length/2+1; i>=0; i--){HeapAdjust(i,array.length-1);}}public static void HeapAdjust(int start,int end){int parent = start;int child = 2*parent+1;while(child <= end){// 找出左右孩子中最大值if(child+1 <= end && array[child] < array[child+1]) child++;if(array[parent] < array[child]){swap(parent,child);parent = child;child = 2*parent+1;}else{break;}}}public static void swap(int i,int j){int tmp = array[i];array[i] = array[j];array[j] = tmp;}
}

总结

以上就是这篇博客的主要内容了,大家多多理解,下一篇博客见!

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

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

相关文章

如何为nginx配置环境变量-linux(-bash: nginx: 未找到命令)

我在安装nginx后&#xff0c;输入nginx 始终提示:"-bash: nginx: 未找到命令" 只能使用&#xff1a;“ /usr/local/nginx/sbin/nginx ” 此文是对执行 nginx -s reload 命令 提示未找到的解决方案&#xff01; 避免浪费时间&#xff01;&#xff01;&#x…

武忠祥《660题》高效刷题包+资料分享

660题的难度书虽然比较难&#xff0c;对于基础的考察比较深入&#xff0c;所以&#xff0c;有没有一种可能&#xff0c;做题太慢&#xff0c;是因为基础不好导致的&#xff01; 所以再继续做下去&#xff0c;就没有什么意义了&#xff0c;因为这就像是用一把钝刀去砍树&#x…

网络安全渗透测试工具

网络安全渗透测试常用的开发工具包括但不限于以下几种&#xff1a; Nmap&#xff1a;一款网络扫描工具&#xff0c;用于探测目标主机的开放端口和正在运行的服务&#xff0c;是网络发现和攻击界面测绘的首选工具。Wireshark&#xff1a;一个流量分析工具&#xff0c;用于监测网…

C++之struct和class区别

在C中 struct和class唯一的区别就在于 默认的访问权限不同 区别&#xff1a; struct 默认权限为公共 class 默认权限为私有 class C1 {int m_A; //默认是私有权限 };struct C2 {int m_A; //默认是公共权限 };int main() {C1 c1;c1.m_A 10; //错误&#xff0c;访问权限是私…

VS2022 使用ClaudiaIDE设置自定义图片背景

ClaudiaIDE的下载 第一步&#xff0c;如下图所示&#xff0c;点击&#xff1a;扩展——管理扩展。 第二步&#xff0c;如下图所示&#xff0c;点击&#xff1a;联机——右上角输入ClaudiaIDE搜索——点击下载。 下载后关闭所有VS窗口&#xff0c;然后等待弹出一个安装窗口&…

Java基础【多线程】

什么是线程 线程&#xff08;Thread&#xff09;是计算机科学中的一个重要概念&#xff0c;指的是在单个程序内部同时执行的一条独立的指令序列。简而言之&#xff0c;线程就是在一个进程内部并发执行的一段代码。每个线程都有自己的执行路径&#xff0c;可以独立地执行代码&a…

小米汽车正式发布:开启智能电动新篇章

随着科技的不断进步&#xff0c;汽车产业正经历着前所未有的变革。智能电动汽车作为这一变革的重要方向&#xff0c;正吸引着越来越多的目光。在这个充满机遇和挑战的时代&#xff0c;小米汽车凭借其卓越的技术实力和深厚的市场底蕴&#xff0c;终于迈出了坚实的一步。今天&…

Exception in thread “main“ com.fasterxml.jackson.databind.JsonMappingException:

问题&#xff1a;jaskson反序列化超出最大长度 Caused by: com.fasterxml.jackson.core.exc.StreamConstraintsException: String length (5043456) exceeds the maximum length (5000000) 场景&#xff1a;前端传递过大base64 原因&#xff1a; jaskon默认已经限制了最大长…

免费|Python|【需求响应】一种新的需求响应机制DR-VCG研究

目录 1 主要内容 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序对应文章《Contract Design for Energy Demand Response》&#xff0c;电力系统需求响应&#xff08;DR&#xff09;用来调节用户对电能的需求&#xff0c;即在预测的需求高于电能供应时&#xff0c;希…

chrome 控制台不能粘贴

描述&#xff1a;chrome 控制台不能粘贴 解决方案&#xff1a;setting-Experiments-Filter中输入past&#xff0c;取消勾选

国际伦敦金行情分析中的趋势分析方法

国际伦敦金行情走势复杂多变。近期&#xff0c;金价曾经一度刷新历史的新高点至2222&#xff0c;但就在当天&#xff0c;金价又快速下跌跌超过30美元。不过这么多变的伦敦金行情也为我们的交易创造了空间&#xff0c;有空间就等于有机会&#xff0c;只要我们能够掌握国际伦敦金…

C# 多态 派生类 abstract virtual new

静态多态函数重载运算符重载 动态多态abstract 和 virtual的区别定义与用途&#xff1a;成员实现&#xff1a;继承与重写&#xff1a;与接口的区别&#xff1a; 使用抽象类的好处主要体现在以下几个方面&#xff1a;代码重用&#xff1a;设计灵活性&#xff1a;接口定义&#x…

HCIP作业3

第一步 给PC1配置&#xff1a; 先给PC2配置&#xff1a; 第二部 给R1的接口配置ip [R1]int g0/0/0 [R1-GigabitEthernet0/0/0]ip add 192.168.1.252 24 [R1-GigabitEthernet0/0/0]int g0/0/1 [R1-GigabitEthernet0/0/1]ip ad 100.1.1.1 24 给R2的接口配置IP [R2]int g0/0/…

Java:接口应用(Comparable接口与比较器)

目录 1.引例2.Comparable接口使用3.Comparable接口的局限性4.使用comparaTo实现排序5.比较器&#xff08;Comparator接口&#xff09; 1.引例 class Student{private String name;private int age;public Student(String name, int age) {this.name name;this.age age;} } p…

#孩子学习编程的目的是什么?#

谢谢今日头条编辑的盛情邀请&#xff0c;对此&#xff0c;我发表自己的一点拙见。 首先&#xff0c;最重要的一点&#xff0c;学习编程可以练习打字&#xff0c;加强拼音输入法的掌握。对于孩子的语文成绩有一定的提高帮助&#xff0c;也为将来走上工作熟练使用电脑输入法打下扎…

Linux的学习之路:3、基础指令(2)

一、echo指令 这个指令在上篇文章我也用了但是忘了说了&#xff0c;这个指令的大概用法就是把后面跟的文本等输出在显示器上&#xff0c;如下代码所示打印的“Hello Linux” [rootVM-24-9-centos ~]# echo "Hello Linux" Hello Linux二、输出重定向与输入重定向 着…

vue页面实现左右div宽度,上下div高度分割线手动拖动高度或者宽度自动变化,两个div宽度或者高度拉伸调节,实现左右可拖动改变宽度的div内容显示区

实现左右或者上下div两部分拖动&#xff0c;宽度或者高度自动变化,实现流畅平滑的变化&#xff0c;还可以是实现拖动到一定宽度就不让拖动了&#xff0c;如果你不需要最小宽度&#xff0c;就直接去掉样式就行 这是页面。分左中右三部分&#xff0c;中间我是用来作为拖动的按钮…

Java实现猜数字游戏:编程入门之旅

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

Java研学-SpringBoot(三)

五 Spring Boot 自动配置原理 1 概念 springboot的自动装配就是从spring.factories文件中获取到对应的需要进行自动装配的类&#xff0c;并生成相应的Bean对象&#xff0c;然后将它们交给spring容器来帮我们进行管理。核心注解&#xff1a;SpringBootApplication   调用main…

使用 Yoda 和 ClickHouse 进行实时欺诈检测

背景 Instacart 是北美领先的在线杂货公司,拥有数百万活跃的客户和购物者。在其平台上打击欺诈和滥用行为不仅对于维护一个值得信赖和安全的环境至关重要,也对保持Instacart的财务健康至关重要。在这篇文章中,将介绍了一个欺诈平台——Yoda,解释了为什么我们选择ClickHous…