/**
* 基数排序,从数字的末位开始,对每一位进行一次“桶排序”
*/
fun radixSort(array: IntArray) {
//先找出最大的数,计算最大的数有几位
var maxValue = array[0]
array.forEach {
maxValue = max(maxValue, it)
}
var length = 1
while ((maxValue / 10) != 0) {
maxValue /= 10
length++
}
var mod = 10
var dev = 1
for (i in 0 until length) {
val buckets = Array(10) {
MutableList(0) { 0 }
}
//每个元素入桶
array.forEach {
val whichBucket = (it % mod) / dev
buckets[whichBucket].add(it)
}
//从桶中捞出来重新给到array
var index = 0
buckets.forEach {
if (it.isNotEmpty()) {
it.forEach { element ->
array[index++] = element
}
}
}
mod *= 10
dev *= 10
}
}
基数排序的kotlin实现
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 一、原理 基数排序也是非比较的排序算法,对每一位进行排序,从最低位开始排序,复杂度为O(kn),为数组长度,K为数...