1.基本思想

桶排序是将待排序集合中处于同一个值域的元素存放在同一个桶中1

2.算法设计2

假设有一个班级有5个人,这次期末他们分别考了5分,2分,4分,5分,8分(满分为10分)。需要将这些分数从小到大排序

首先我们申请一个大小为11的数组int bucket[11]。在最开始的时候我们都把该数组的元素bucket[0]~bucket[10]都初始化为0,表示这些分数都还没有人得到过。例如bucket[0]表示的是目前还没有人得到0分,bucket[8]表示的是目前还没有人得到8分。

  1. 开始处理每一个分数。第一个人的分数为5分,那么就将bucket[5]的值在原来的基础上加1,即bucket[5]的值从0变为1,表示5分出现过一次
  2. 第二个人的分数为2分,那么就将bucket[2]的值在原来的基础上加1,即bucket[2]的值从0变为1,表示2分出现过一次
  3. 第三个人的分数为4分,以此类推,可得
  4. 第四个人的分数为5分,注意了,我们在bucket[5]的值在原来的基础上加1,那么bucket[5]的值从1变为2,表示5分出现两次
  5. 最后一个人的分数为8分,得

    最终,只需要将出现过的分数打印出来

3.代码

public class SimpleBucketSort {
public static void main(String[] args) {
// 下面是学生取得的分数,假设分数最大为10
int[] a = {5,3,5,2,8};
// 创建11个分数层,a[0]=0:表示分数为0分的出现0个人
int[] bucket = new int[11];
for(int i = 0; i < a.length; i++) {
// 出现分数为a[i]的有barrel[a[i]]个人
bucket[a[i]]++;
}
// 打印
for (int i = 0; i < bucket.length; i++) {
// 出现几次就打印几次
for(int j = 1; j <= bucket[i]; j++) {
System.out.print(i + " ");
}
}
}
}

4.复杂度

  • 时间复杂度

在初始化桶时,需要循环n次(n为桶的个数,在java语言中默认都已经初始化为0),在把分数放入桶中时,循环了m次(m为待排序的个数),而在打印时一共循环了(m+n)次,所以整个排序算法一共执行了(n+m+m+n)次。用大写的O来表示时间复杂度,因此该算法的时间复杂度为O(n+m+m+n),即O(2(n+m))。但是一般在说时间复杂度时都是忽略常数,也就是桶排序的最终时间复杂度为O(m+n),并且一般字母都得大写表示,即O(M+N)。

  • 空间复杂度

桶排序所占用的空间比较糟糕,非常浪费空间,如果要排序的数的范围在0~10000000000000,那得创建出10000000000001个变量。创建N个桶,并且待排序的数为M,那么空间复杂度为O(N+M)。

5.优缺点

  • 优点

速度是比较快的,从上面的时间复杂度可以看出。

  • 缺点

比较浪费空间,假设待排序的数中有一个元素值为2100000000000,那么必须创建一个大于2100000000000的桶数。

6.思考

  • 该算法其实可以来做去重复元素,只需要在打印时做一点改动。
// 打印(去重)
for(int i = 0; i < barrel.length; i++) {
if(barrel[i] != 0) {
// 打印的是分数
System.out.print(i + " ");
}
}
  • 目前使用桶排序来对分数进行排序,那么目前要是姓名和分数,要求将名字按分数从小到大排序后打印输出,目前的简单桶排序做不到,输出的只能是分数。

  1. 参考博客:https://www.jianshu.com/p/204ed43aec0c ↩︎

  2. 参考书籍:《啊哈!算法》 ↩︎

简单桶排序(Bucket Sort)的更多相关文章

  1. 桶排序bucket sort

    桶排序 (Bucket sort)或所谓的箱排序的原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的 ...

  2. 计数排序与桶排序(bucket sort)

    Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...

  3. 算法-桶排序(Bucket sort)

    本文由@呆代待殆原创,转载请注明出处. 简介:这个排序算法不属于比较排序,在平均情况下他的时间代价是O(n),并且它假设它的输入数据均匀的分布在一个固定的区间里. 思路:桶排序假设他的输入均匀的分布在 ...

  4. 桶排序(bucket sort)

    Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...

  5. 排序:桶排序Bucket sort

    补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 无序数组有个要求,就是成员隶属于 ...

  6. 桶排序Bucket sort(转)

    补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 我自己的理解哈,可能与网上说的有 ...

  7. c++简单桶排序

    c++简单桶排序 题目一样,还是排序 桶排序是排序算法里比较快的 代码 + 注释 #include <bits/stdc++.h> using namespace std; int mai ...

  8. 简单选择排序 Selection Sort 和树形选择排序 Tree Selection Sort

    选择排序 Selection Sort 选择排序的基本思想是:每一趟在剩余未排序的若干记录中选取关键字最小的(也可以是最大的,本文中均考虑排升序)记录作为有序序列中下一个记录. 如第i趟选择排序就是在 ...

  9. 简单桶排序算法-python实现

    #-*- coding: UTF-8 -*- import numpy as np def BucketSort(a, n): barrel = np.zeros((1, n), dtype = 'i ...

随机推荐

  1. hibernate跟Mybatis/ ibatis 的区别,为什么选择?(转)

    第一章 Hibernate与MyBatisHibernate 是当前最流行的O/R mapping框架,它出身于sf.NET,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀的O/R ...

  2. maven构建错误 RSA premaster secret error: SunTls12RsaPremasterSecret KeyGenerator not available

    转载地址:https://blog.csdn.net/daydayuptiantian/article/details/78763035 错误信息前面显示的是:Failed to execute go ...

  3. Centos7搭建Apache2.4

    我不多说废话了,相信在座的都应该明白怎么安装Apache2.4,我这才用yum源安装的,我个人认为这样安装的话,可以节省一些时间,有的网络不是很好,要等一段时间. 配置与Apache2.2的版本有点变 ...

  4. 关于pip命令的几点提醒

    pip install xxxxx 总会遇到安装失败,或者下载速度很慢的情况.这是因为从国外安装资源包,造成速度慢,那有咩有国内的源呢,有的. 国内源: 清华:https://pypi.tuna.ts ...

  5. kuangbin专题 专题九 连通图 HDU 4738 Caocao's Bridges

    题目链接:https://vjudge.net/problem/HDU-4738 题目:tarjan求桥,坑点: 题目说是分岛任务...如果所有岛之间没有完全连通,就不需要执行任务了...答案直接是0 ...

  6. python UI自动化生成BeautifulReport测试报告并保存截图

    前面已经写过利用BeautifulReport生成测试报告,那么接下来讲讲如何在测试报告里面保存截图 首先需要在测试用例中定义一个截图的方法: # 截图方法 """ os ...

  7. xpath解析html标签

    最近忙一个需求:把一个字符串形式的html文档转化成excel. 分解需求: ① 实现语言 ———— python ② html解析 ———— 用 lxml库的etree工具,xpath方式解析文档树 ...

  8. pyautocad

    首部必须 #!/usr/bin/env python # -*- coding: utf-8 -*- 导入pyautocad import pyautocad import re # 设置python ...

  9. Linux - shell - xargs - 基础

    概述 简述 xargs 的使用 背景 尝试批量操作文件 发现一些问题小问题 然后, 尝试解决 准备 环境 OS centos7 1. 操作: 尝试创建多个 文本文件 概述 尝试创建多个文本文件 1. ...

  10. moment of 2019.08.15

    一件事,足以影响一个人的一生,准确的说,是两个人的人生轨迹. 人生中的遇见,有的是幸运,有的是不幸.2018.4的遇见,是我人生中的不幸,至少到目前为止,确实是不幸,从各个方面让我的生活不如以前. 如 ...