zoukankan      html  css  js  c++  java
  • 排序-计数-基础版

    引用:https://www.cnblogs.com/xiaochuan94/p/11198610.html
    第一步:找出原数组中元素值最大的,记为max。
    第二步:创建一个新数组count,其长度是max加1,其元素默认值都为0。
    第三步:遍历原数组中的元素,以原数组中的元素作为count数组的索引,以原数组中的元素出现次数作为count数组的元素值。
    第四步:创建结果数组result,起始索引index。
    第五步:遍历count数组,找出其中元素值大于0的元素,将其对应的索引作为元素值填充到result数组中去,每处理一次,
    count中的该元素值减1,直到该元素值不大于0,依次处理count中剩下的元素。
    第六步:返回结果数组result。

    该算法会浪费资源,下次给个优化版的。

    python算法实现:
    import math
    
    def countSort(data):
        #假设负无穷大为最小值
        listMax = float("-inf")
        #把列表中最大值给listMax赋值
        for i in data:
            listMax = max(i,listMax)
        #初始化计数数组count
        countList = [0] * (listMax + 1)
        #对计数数组各元素赋值,data列表中的值,即是countList的索引,索引位置对应的值表示该数字出现的次数
        for i in data:
            countList[i] += 1
        #创建结果数组
        resultList = [0] * len(data)
        #创建结果数组的起始索引
        index = 0
        for i in range(len(countList)):
            #只统计出现次数大于0的情况,当其值大于0,说明出现了该数字
            while countList[i] > 0 :
                #i的值表示原列表中需要比较的数
                resultList[index] = i
                index += 1
                #出现次数减1
                countList[i] -= 1
        return resultList
    
    
    def main():
        data = list(map(int, input("请输入需要排序的列表,逗号间隔:").split(",")))
        # 7,4,1,2,6,5,3
        # 7,4,1,2,6,8
        rtn = countSort(data)
        print("计数排序结果为:", end="")
        print(rtn)
    
    if __name__ == "__main__":
        main()
     
  • 相关阅读:
    day12-html(css)
    day-12- 前端 html
    python-day11 pymysql
    day11-mysql 练习题
    python-day11 Mysql 数据类操作
    python-day11 Mysql 数据类型
    python-day11-MYSQL 数据库及数据表
    最简单的checkbox, radio跟文字在一行
    前端压缩
    table td 设置宽高无效的问题
  • 原文地址:https://www.cnblogs.com/an-wl/p/12615954.html
Copyright © 2011-2022 走看看