zoukankan      html  css  js  c++  java
  • CountingSort

    package _Sort.Algorithm
    
    /**
     * https://www.geeksforgeeks.org/counting-sort/
     * It is not a comparison based sorting.
     * It running time complexity is O(n) with space proportional to the range of data.
     * */
    class CountingSort {
    
        fun sortArray(nums: IntArray) {
            val min = nums.min() ?: 0
            val max = nums.max() ?: 0
            var range = max - min + 1
            if (range <= 0) {
                range = 0
            }
            val countArray = IntArray(range)
            val output = IntArray(nums.size)
            //count each element in given array and place the count at the appropriate index
            for (num in nums) {
                countArray[num - min]++
            }
            //modify the count array by adding previous counts
            for (i in 1 until countArray.size) {
                countArray[i] += countArray[i - 1]
            }
            //set to output array and decreasing count array
            for (i in nums.size - 1 downTo 0) {
                val newIndex = countArray[nums[i] - min]
                output[newIndex - 1] = nums[i]
                //newIndex--
            }
            for (i in nums.indices) {
                nums[i] = output[i]
            }
            for (item in nums) {
                print(item)
                print(",")
            }
        }
    }
  • 相关阅读:
    软件开发模式
    个人中心设计
    定制四则运算
    功能测试用例分析报告
    NABCD
    开发流程
    开发流程
    结对编程
    注册界面进行Toast提示
    登录注册页面修改错误
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/13073904.html
Copyright © 2011-2022 走看看