@羲凡——只为了更好的活着
Scala 实现计数排序
def Countingsort(arr: Array[Int]): Array[Int] = {
var min = arr(0)
var max = arr(0)
val arrLength = arr.length
// 找到数组的最小值和最大值
for(i <- 1.until(arrLength)){
if(arr(i) < min) min = arr(i)
if(arr(i) > max) max = arr(i)
}
// 生成长度为 max-min+1 的计数数组,每个元素为 0
val countArr = Array.fill(max-min+1)(0)
// 根据原数组的值计数生成计数数组
for (i <- 0.until(arrLength)) {
countArr(arr(i)-min) = countArr(arr(i)-min) + 1
}
println(countArr.mkString(","))
// 计数数组变形,目的是将计数数组的元素等于相应整数的最终排序位置
// 比如:计数数组的第m个元素的值为n,表示整数m+1的最终排序位置为第n位
for(i <- 1.until(countArr.length)){
countArr(i) = countArr(i) + countArr(i-1)
}
println(countArr.mkString(","))
// 循环原数组,根据计数数组,将数值插入最终结果数值中
val resArr = Array.fill(arrLength)(0)
for(i <- 0.until(arrLength).reverse){
val mm = arr(i)-min
resArr(countArr(mm)-1) = arr(i)
countArr(mm) = countArr(mm) - 1
}
resArr
}
====================================================================
@羲凡——只为了更好的活着
若对博客中有任何问题,欢迎留言交流