/**
* 基数排序,从数字的末位开始,对每一位进行一次“桶排序”
*/
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为数...