算法_桶排序(java)

简介: 算法_桶排序(java)

前言

流程图:

9bcd258f7f3148f3909de1a85313ebfc.png


一、桶排序思想步骤

桶排序:将一组数分成若干份,然后利用数求出每份之间的范围差,然后将在符合范围的数进行插入,因为存在不断地插入数,所以可以使用LinkList和ArrayList链表来进行对桶数的存储和桶内数的存储。


过程:首先找出数中的最大值和最小值,然后求出桶数和间隔数,之后创建链表将桶数存入,将数中的每个数存入到对应的桶内,对每个桶内进行排序,从0号桶开始,将每个桶内排好顺序的数放入到一个新的数组中,最后打印数组即可


桶数计算:(max-min)/数组长度+1

间隔数:(max-min+1)/数组长度


二、代码

代码如下(示例):

void Bucketsort(int a[])
  {
    int max =a[0];
    int min =a[0];
    for(int i =0;i<a.length;i++) //求出最大最小值
    {
      if(a[i]<min)
      {
        min = a[i];
      }
      if(a[i]>max)  
      {
        max = a[i];
      }
    }
    //也可以这样写
  /*  
    int max1 = Integer.MAX_VALUE;
    int min1 = Integer.MIN_VALUE;
    for(int i =0;i<a.length;i++)
    {
      max1 = Math.max(max1, a[i]);
      min1 = Math.min(min1, a[i]);
    }
  */
    //计算桶的数量
    int bucketnum = (max-min)/a.length+1;
    int m = (max-min+1)/a.length;//间隔
    ArrayList<ArrayList<Integer>> bucket =new ArrayList<ArrayList<Integer>>(bucketnum);
    //将每个桶放入到链表中,因为不断插入,所以使用ArrayList
    for(int i=0;i<bucketnum;i++)
    {
      bucket.add(new ArrayList<Integer>());
    }
    //将每个元素放入桶中
    for(int i=0;i<a.length;i++)
    {
      int num = (a[i]-min)/m;
      bucket.get(num).add(a[i]);
    }
    //对每个桶进行排序
    for(int i=0;i<bucket.size();i++)
    {
      Collections.sort(bucket.get(i));
    }
    //将桶中的数赋值到原序列
    int index =0;
    for(int i =0;i<bucket.size();i++)
    {
      for(int j =0;j<bucket.get(i).size();j++)
      {
        a[index++] = bucket.get(i).get(j);
      }
    }

如文章存在错误,请在评论区指出,谢谢观看!

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
69 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
3月前
|
负载均衡 NoSQL 算法
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
这篇文章是关于Java面试中Redis相关问题的笔记,包括Redis事务实现、集群方案、主从复制原理、CAP和BASE理论以及负载均衡算法和类型。
一天五道Java面试题----第十天(简述Redis事务实现--------->负载均衡算法、类型)
|
3月前
|
搜索推荐 算法 Java
手写快排:教你用Java写出高效排序算法!
快速排序(QuickSort)是经典的排序算法之一,基于分治思想,平均时间复杂度为O(n log n),广泛应用于各种场合。在这篇文章中,我们将手写一个Java版本的快速排序,从基础实现到优化策略,并逐步解析代码背后的逻辑。
145 1
|
1月前
|
算法 搜索推荐 Java
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
这篇文章介绍了如何使用Java后端技术,结合Graphics2D和Echarts等工具,生成包含个性化信息和图表的海报,并提供了详细的代码实现和GitHub项目链接。
105 0
java 后端 使用 Graphics2D 制作海报,画echarts图,带工具类,各种细节:如头像切割成圆形,文字换行算法(完美实验success),解决画上文字、图片后不清晰问题
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
67 2
|
1月前
|
搜索推荐 Java Go
探究桶排序算法
探究桶排序算法
20 1
|
1月前
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
14 0
|
1月前
|
算法 Java Linux
java制作海报一:java使用Graphics2D 在图片上写字,文字换行算法详解
这篇文章介绍了如何在Java中使用Graphics2D在图片上绘制文字,并实现自动换行的功能。
97 0
|
1月前
|
算法 Java 测试技术
数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题
文章详细介绍了如何用Java自定义实现一个顺序表类,包括插入、删除、获取数据元素、求数据个数等功能,并对顺序表进行了测试,最后还提及了Java中自带的顺序表实现类ArrayList。
21 0
|
3月前
|
设计模式 缓存 算法
揭秘策略模式:如何用Java设计模式轻松切换算法?
【8月更文挑战第30天】设计模式是解决软件开发中特定问题的可重用方案。其中,策略模式是一种常用的行为型模式,允许在运行时选择算法行为。它通过定义一系列可互换的算法来封装具体的实现,使算法的变化与客户端分离。例如,在电商系统中,可以通过定义 `DiscountStrategy` 接口和多种折扣策略类(如 `FidelityDiscount`、`BulkDiscount` 和 `NoDiscount`),在运行时动态切换不同的折扣逻辑。这样,`ShoppingCart` 类无需关心具体折扣计算细节,只需设置不同的策略即可实现灵活的价格计算,符合开闭原则并提高代码的可维护性和扩展性。
63 2