当前位置: 首页 > news >正文

3、桶排序

1、思路:

  ①、首先找到数组中的最大值,然后新建一个初始值为 0 的数组 bucket, 此数组的长度是数组最大值+1,新建的这个数组中的下标值存放的元素就是原数组的数据值。

  ②、找到最大值后,开始遍历原数组,把原数组的数据加入bucket的下表中,bucket[i],每当有1个i bucket[i]的值就加一, 然后已经装入桶后,
   
  ③、遍历桶,如果bucket[j]位置不是 0 就说明此下标有数据,也就是说,此下标在原数组里有这个值, 然后排序 就是从大到小了 arr[i++]=j;

2、优化
   创建 bucket 数组的大小为 (max - min) 即可。
 

3、 时间复杂度:O(N)

  额外空间复杂度:O(N)
  是否可实现稳定性:否

 

 4、运用实例: 

   Leetcode 164. Maximum Gap

  假设数组 nums 有N个元素min到max。

  那么每个桶的最大差值不会小于ceiling[(max - min) / (N - 1)]

  令最大差值就是 ceiling[(B - A) / (N - 1)]

  去除 nums 的 max、val 值后 nums 剩下 N - 2 个元素

  将他们放在 N - 1个桶中,且第 k 个桶存放的数值大小为 [min+ (k-1)gap, min+ k*gap).

   

 

5、基数排序:

    动画演示:https://www.cs.usfca.edu/~galles/visualization/RadixSort.html

    运用: https://www.cnblogs.com/skillking/p/9789980.html

转载于:https://www.cnblogs.com/skillking/p/9788052.html

相关文章:

  • Oracle DB 优化-AWR及相关内容
  • 大话 JavaScript 动画
  • Pycharm的使用一
  • iOS__上传应用到AppStore出现Authenticating with the iTunes store
  • 数字联盟刘晶晶:四年只做一个产品
  • java 通过Unsafe不使用构造器直接创建对象
  • jenkins配置用户角色权限,根据不同权限显示视图、Job
  • JVM虚拟机(五):JDK8内存模型—消失的PermGen
  • Java8 new Time Api
  • Ansible常用模块详解
  • 学以致用二十三-----shell脚本里调用脚本
  • 创建新用户,及用新用户名和密码登录--------------DCL
  • Docker Compose 简介
  • 算法-插入排序
  • HAWQ配置之客户端访问
  • 分享一款快速APP功能测试工具
  • 「译」Node.js Streams 基础
  • 【编码】-360实习笔试编程题(二)-2016.03.29
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Intervention/image 图片处理扩展包的安装和使用
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JAVA_NIO系列——Channel和Buffer详解
  • Javascript弹出层-初探
  • JDK 6和JDK 7中的substring()方法
  • mysql_config not found
  • Spark RDD学习: aggregate函数
  • vue:响应原理
  • Vue小说阅读器(仿追书神器)
  • win10下安装mysql5.7
  • 程序员该如何有效的找工作?
  • 更好理解的面向对象的Javascript 1 —— 动态类型和多态
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 开发了一款写作软件(OSX,Windows),附带Electron开发指南
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 一道闭包题引发的思考
  • ​​​​​​​​​​​​​​Γ函数
  • !$boo在php中什么意思,php前戏
  • (007)XHTML文档之标题——h1~h6
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (初研) Sentence-embedding fine-tune notebook
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (力扣)1314.矩阵区域和
  • (七)Knockout 创建自定义绑定
  • (学习日记)2024.01.09
  • (转载)Linux 多线程条件变量同步
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .net core 6 集成和使用 mongodb
  • .net mvc部分视图
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .Net的DataSet直接与SQL2005交互
  • .Net语言中的StringBuilder:入门到精通
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /usr/bin/perl:bad interpreter:No such file or directory 的解决办法
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题