简单桶排序(Bucket Sort)
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分。

- 开始处理每一个分数。第一个人的分数为5分,那么就将bucket[5]的值在原来的基础上加1,即bucket[5]的值从0变为1,表示5分出现过一次

- 第二个人的分数为2分,那么就将bucket[2]的值在原来的基础上加1,即bucket[2]的值从0变为1,表示2分出现过一次

- 第三个人的分数为4分,以此类推,可得

- 第四个人的分数为5分,注意了,我们在bucket[5]的值在原来的基础上加1,那么bucket[5]的值从1变为2,表示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 + " ");
}
}
- 目前使用桶排序来对分数进行排序,那么目前要是姓名和分数,要求将名字按分数从小到大排序后打印输出,目前的简单桶排序做不到,输出的只能是分数。
简单桶排序(Bucket Sort)的更多相关文章
- 桶排序bucket sort
桶排序 (Bucket sort)或所谓的箱排序的原理是将数组分到有限数量的桶子里,然后对每个桶子再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序),最后将各个桶中的数据有序的 ...
- 计数排序与桶排序(bucket sort)
Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...
- 算法-桶排序(Bucket sort)
本文由@呆代待殆原创,转载请注明出处. 简介:这个排序算法不属于比较排序,在平均情况下他的时间代价是O(n),并且它假设它的输入数据均匀的分布在一个固定的区间里. 思路:桶排序假设他的输入均匀的分布在 ...
- 桶排序(bucket sort)
Bucket Sort is a sorting method that subdivides the given data into various buckets depending on cer ...
- 排序:桶排序Bucket sort
补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 无序数组有个要求,就是成员隶属于 ...
- 桶排序Bucket sort(转)
补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 我自己的理解哈,可能与网上说的有 ...
- c++简单桶排序
c++简单桶排序 题目一样,还是排序 桶排序是排序算法里比较快的 代码 + 注释 #include <bits/stdc++.h> using namespace std; int mai ...
- 简单选择排序 Selection Sort 和树形选择排序 Tree Selection Sort
选择排序 Selection Sort 选择排序的基本思想是:每一趟在剩余未排序的若干记录中选取关键字最小的(也可以是最大的,本文中均考虑排升序)记录作为有序序列中下一个记录. 如第i趟选择排序就是在 ...
- 简单桶排序算法-python实现
#-*- coding: UTF-8 -*- import numpy as np def BucketSort(a, n): barrel = np.zeros((1, n), dtype = 'i ...
随机推荐
- Vs2013以管理员身份运行
VS快捷方式目录下的devenv.exe 右键->兼容性疑难解答->疑难解答程序->勾选该程序需要附加权限即可,以后每次打开VS时都会以管理员身份运行了!
- Centos7更改网卡名称Eth0
标签: Centos7更改网卡名称 2016-12-06 21:55 8737人阅读 评论(1) 收藏 举报 分类: linux(6) 作者同类文章X 版权声明:本文为博主原创文章,未经博主允许不 ...
- Entry小部件:
导入tkinter import Tkinter from Tinter import * import tkinter from tinter import * 实例化Tk类 root=tkinte ...
- 小匠第二周期打卡笔记-Task05
一.卷积神经网络基础 知识点记录: 神经网络的基础概念主要是:卷积层.池化层,并解释填充.步幅.输入通道和输出通道之含义. 二维卷积层: 常用于处理图像数据,将输入和卷积核做互相关运算,并加上一个标量 ...
- python os 模块详解
os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'. os.getcwd:得 ...
- 小白学 Python 爬虫(24):2019 豆瓣电影排行
人生苦短,我用 Python 前文传送门: 小白学 Python 爬虫(1):开篇 小白学 Python 爬虫(2):前置准备(一)基本类库的安装 小白学 Python 爬虫(3):前置准备(二)Li ...
- MySQL排序查询
语法:① SELECT 查询 (要找的东西)②FROM 表 (在哪个表找)③[WHERE 筛选条件](取出重要的或有用的)④ORDER BY 排序列表 [ASC|DESC] (排序的关键字 字段)([ ...
- CI框架Email类发送邮件提示Unable to send data: . The following SMTP error was encountered: Unable to .......
最近服务器迁移,然后CI框架做的项目发邮件全挂掉了,刚开始是25端口没开,然后开了正好还是有问题, 1.打印请求信息和返回信息 echo $this->email->print_debug ...
- js动态创建的select2标签样式加载不上解决办法
js动态创建的select2标签样式加载不上:调用select2的select2()函数来初始化一下: js抛出了Uncaught query function not defined for Sel ...
- centos7 源码编译安装nginx教程 nginx安装脚本 lua-nginx-module
安装nginx需要pcre zlib openssl的库,下文都是在官网直接下载用作编译安装 该nginx安装教程,有安装maxmind IP 库 该nginx安装教程有安装lua-nginx-mod ...