计数排序
算法描述:
- 找出待排序的数组中最大和最小的元素;
- 统计数组中每个值为i的元素出现的次数,存入数组C的第i项;
- 对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加);
- 反向填充目标数组:将每个元素i放在新数组的第C(i)项,每放一个元素就将C(i)减去1。
不太白话的白话解释:创建一个从数组中最小到最大元素的一个列表(列表下标为元素大小),先从头到尾遍历一遍,为每一个对应的元素大小的出现次数计数,然后再从小到大依次添加到结果中
动图演示:
算法性质:
空间复杂度:数据分类的类别数(即max-min) O(k)(k=max_num - min_num)
时间复杂度:先对输入从头到尾遍历一遍,然后根据类型依次遍历输出O(n+k)
代码实现:
def Countsort(nums):
length=len(nums)
max_num=max(nums)
min_num=min(nums)
count=[0]*(max_num+1)
for i in range(min_num,length):#将数组中的元素放入对应的位置
count[nums[i]]+=1
array=[]
for i in