"""
计数排序:计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。
作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。
这种排序算法不是基于元素比较,而是利用数组下标来确定元素的正确位置。
"""
def NumSort1(arr, low, high):
# low可以最为数组的偏移量,用于将数据对号入座
size = high - low +1 # 临时数组的长度
temp =[0]* size
for i inrange(len(arr)): # 遍历无序数组
# 每一个元素值减去最小值,得到在临时数组中的实际位置
k = arr[i]- low
for j inrange(size):
# 将值放入到对应的索引位置
if k == j:
temp[j]+=1
# 遍历临时数组,将索引下标值的次数进行输出到arr
for i inrange(size):
# 当下标有值时,说明次数有元素
k =0 # 用来记录输出的次数
if temp[i]:while k < temp[i]:
arr.pop(0)
arr.append(i + low) # 将偏移的数进行还原
k = k +1return arr
if __name__ =='__main__':
b =[95,94,91,98,99,90,99,93,91,92]NumSort1(b,min(b),max(b))print(b)