栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java关于桶排序的通用分组规则

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java关于桶排序的通用分组规则

一、桶排序的思想简介

根据某种规则将数据分散到有限的桶中,对每个桶中的数据进行单独排序,最后再合并桶中元素,得到结果。

二、示例

一组数据{19,9,21,1,11,8}根据每个桶的范围进行分组,再对每个桶进行排序,最后再合并得到排序结果。

 三、关于排序分组规则的分析 根据如上示例可以看出,分组规则的设计应与两个指标有关。

1)桶的数量

桶的数量不能太少,这样数据会过于集中,从而导致时间复杂度增加。

但是数量也不能过多,这样会增加空间复杂度。

桶的数量也决定了一个桶包含待排序数的范围

所以桶的数量要合适。

2)每个桶中待排序数的范围

每个桶应容纳整个数据中某一范围的数据,当然这个范围不一定如上示例一样是平均分配,也可根据数据的松散程度划分,让数据不那么集中在一个桶中,提高算法效率。

但是这样会导致另一个问题,除非有特殊需要,我们不可能总是修改桶包含数据的范围,数据过多我们也不好找出合适的分组规则。

根据以上问题可以采用以下规则进行分组来使其对大多数数据可用

1)桶的数量通过传参输入或者采用数据的长度或比数据长度略少。

2)每个桶包含待排序的数的范围采用平均分配的方式,避免手动分配使其达到通用的目的。

四、桶中待排序数范围的具体分配方式

1、找出这组数据的最大值max,最小值min

2、这组数据都减去最小值,得到一组范围在[0,max-min]之间的数据 

3、 L= (max-min) / n-1   (n为桶数,L为每段的长度)得到n段

4、将原来那组数据转化为[0,max-min]中的数据 / L 就可以得到其要分配桶的下标

示例如下:

一组数据:19,9,21,1,11,8,  假设桶数n = 5

max = 21,min = 1

max - min = 20

L = 20 / 5 = 4

(19  - 1) / 4 = 4 

(9 - 1) / 4 = 2

(21 - 1) / 4 = 4

(1 - 1) / 4 = 0

(11 - 1) = 2

(8 - 1) = 1

桶1(1),桶2(8),桶3(9,11),桶4(),桶5(19,21),

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1006641.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号