fun bucketSort(array: IntArray, bucketCapacity: Int) {
//找出最大的,找出最小的
var max = array[0]
var min = array[0]
array.forEach {
max = max(max, it)
min = min(min, it)
}
//计算bucket的个数
val bucketCount = (max - min) / bucketCapacity + 1
//初始化bucket
val buckets = Array(bucketCount) {
MutableList(0) { 0 }
}
//所有元素入桶
array.forEach {
val whichBucket = (it - min) / bucketCapacity
buckets[whichBucket].add(it)
}
//遍历所有的桶,并将桶中的元素排序,然后添加到结果数组中
var index = 0
buckets.forEach { list ->
if (list.isNotEmpty()) {
list.toIntArray().run {
insertionSort(this) //这里使用的插入排序对桶中的元素进行排序
forEach {
array[index++] = it
}
}
}
}
}
桶排序的kotlin实现
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 常见的经典非比较类排序算法有计数排序、桶排序。区别于比较类排序,非比较类排序利用额外的内存空间实现更快排序,算法以...
- 一、原理 桶排序是计数排序的升级版。它利用了函数的映射关系,高效的关键在于映射函数的确定。 假设输入数据服从均匀分...