排序-计数-基础版
引用: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()