Scala 实现计数排序

@羲凡——只为了更好的活着

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
}

====================================================================

@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值