22.1.8 堆排序、桶排序

22.1.8 堆排序、桶排序

1. 堆排序:时间复杂度:O(nlogn), 空间复杂度:O(1)

(1)完全二叉树:
  • 第i个节点的左孩子:2*i+1;
  • 第i个节点的右孩子:2*i+2;
  • 第i个节点的父节点:(i-1)/2;
(2)大根堆:以节点i为根节点的子树中,节点i上的值是这棵子树中最大的。
(3)小根堆:以节点i为根节点的子树中,节点i上的值是这棵子树中最小的。
(4)code:
public static void main(String[] args)    {        int[] arr = {2,5,3,6,2,1,9,7,8};        heapSoft(arr);        for(int cur:arr)            System.out.print(cur+" ");    }        public static void swap(int[] arr, int i, int j)     {        int tmp = arr[i];        arr[i] = arr[j];        arr[j] = tmp;    }        public static void heapSoft(int[] arr)    {                if(arr == null || arr.length<2)            return;        int heapsize = arr.length;

(2)堆注意事项:

  • 用系统提供的小根堆(例如,PriorityQueue

(3)比较器

  • 相当于c++中的比较运算符重载,可以实现两个类实例化的变量之间的比较。可以配合java中Array.sort(待排序的数组,排序方式)一起使用。
  • 返回值标准: 返回值为负数,第一个参数排在前面; 返回值为正数,第二个参数排在前面; 返回值为0;谁在前面无所谓。
  • code:
import java.lang.*;import java.util.Arrays;import java.util.Comparator ;
  • 运行结果:

Name : C, Id : 1, Age : 22 Name : A, Id : 2, Age : 23 Name : B, Id : 3, Age : 21

(4)桶排序

  • 1)桶排序思想下的排序都是不基于比较的排序
  • 2)时间复杂度为O(N),额外空间负载度O(M)
  • 3)应用范围有限,需要样本的数据状况满足桶的划分
  • code:

undefined

Original: https://www.cnblogs.com/txzmy/p/15779618.html
Author: 张满月。
Title: 22.1.8 堆排序、桶排序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607597/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • centos8启动虚拟机没有IP地址,启动网卡失败

    当我们突然发现我们用xshell连接centos8连接不上,我们去虚拟机中查看发现什么问题,我们用使用ip a 命令发现我们没有了IP地址 然后用下面命令发现也无济于事 nmcli…

    Java 2023年6月5日
    095
  • 如何保持Redis和MySQL数据一致?

    认识MySQL和Redis的数据一致性问题 解决 Redis 与 MySQL 数据一致性问题 MySQL和Redis保持数据一致性的解决方案总结 Original: https:/…

    Java 2023年6月15日
    0107
  • Spring Boot + Mybatis 实现动态数据源

    动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库。又比如业务A要访问A数据库,业务B要访问B数…

    Java 2023年5月30日
    092
  • JavaWeb 03_创建servlet项目(详细)

    一、创建web项目 File–New–Project 设置项目相关信息 设置项目名称及工作空间 web项目目录结构如下 二、Servlet的实现 新建包&#…

    Java 2023年6月7日
    083
  • Java入门

    Java特性和优势 简单性 面向对象 可移植性(最重要的优势)write once, run anywhere 高性能 分布式 动态性 多线程 安全性 健壮性 Java三大版本 J…

    Java 2023年6月6日
    095
  • Java性能调优工具

    JDK命令行:jps、jinfo、jstat、jmapMAT:Eclipse Memory AnalyzerJMX – Jconsole,VisualVMBtrace:…

    Java 2023年5月29日
    076
  • 生产环境中java api访问HDFS权限问题Permission denied解决方案

    java api访问hdfs文件系统未指定访问用户的情况下出现报错 //1、创建hadoop configuration对象 // Configuration conf = new…

    Java 2023年5月29日
    0110
  • MyBatis保姆级理解与使用,动态SQL(核心)

    动态S QL(核心) 1.1 简介 Mybatis 框架的动态SQL 技术是一种根据特定条件动态拼装SQL 语句的功能,它存在的意义是为了解决拼接SQL 语句字符串时的难点问题。 …

    Java 2023年6月16日
    057
  • 大白话之数据库事务

    本文摘自我的公众号: 陶朱公Boy。欢迎大家关注! 关注我: 上述文章摘自作者的公众号:陶朱公Boy 公众号内容包括:以下系列文章,欢迎大家关注。也欢迎大家加我微信(公众号有联系方…

    Java 2023年6月15日
    090
  • nginx 配置 https

    javascript;gutter:true; server { listen 443 ssl; listen [::]:443 ssl; server_name portal.x…

    Java 2023年5月30日
    074
  • Mysql之DML操作(SELECT,INSERT,UPDATE,DELETE)

    Mysql之DML操作(SELECT,INSERT,UPDATE,DELETE) 什么是DML 数据操纵语言(Data Manipulation Language, DML)是用于…

    Java 2023年6月8日
    0104
  • (十二)springboot中shiro的使用

    一、引入maven配置 xml;toolbar:false org.apache.shiro     shiro-spring     1.4.0</p> <pr…

    Java 2023年5月29日
    077
  • 【部署系列】Docker 部署 acme.sh

    安装环境 Docker安装 具体的安装直接参考Docker官方文档即可: https://docs.docker.com/engine/install/ 以centos系统为例: …

    Java 2023年6月8日
    0109
  • XenServer中备份正在运行的虚拟机

    本篇文章介绍的内容是关于如何在XenServer中备份正在运行的虚拟机 ,并且可以逐步运行VM的备份过程,此外还有一个shell脚本,可以将所有VM备份或指定的VM备份,我们也可以…

    Java 2023年5月30日
    098
  • 【全网最全】springboot整合JSR303参数校验与全局异常处理

    一、前言 我们在日常开发中,避不开的就是参数校验,有人说前端不是会在表单中进行校验的吗?在后端中,我们可以直接不管前端怎么样判断过滤,我们后端都需要进行再次判断, &#x4…

    Java 2023年6月15日
    086
  • Mybatis(万能map)

    我们使用 对象作为参数有一个缺点: 我们要在mapper.xml文件和测试中要把所有的字段都写出来,那么,假如一个对象有100个字段,那我们要把这些字段都写出来吗? 所以这时我们就…

    Java 2023年6月13日
    079
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球