计数排序假设每个
n列表中的输入元素的键值范围为
0来
k,对于某个整数
k.对于列表中的每个元素,计数排序确定小于它的元素的数量。计数排序可以使用此信息将元素直接放入输出数组的正确槽中。
计数排序使用三个列表:输入列表,
一个[0,1,...,n],输出列表,
B[0,1,...,n]和一个作为临时记忆的列表,
C[0,1,...,k].请注意,
一个而且
B有
n槽(每个元素都有一个槽),而
C包含
k槽(每个键值的槽)。
计数排序从遍历开始
一个
,对每个元素
一个[我]的下标
C它的值和
一个[我](所以它去
C[一个[我]]的值递增
C[一个[我]]由一个。这意味着如果
一个有七个
0在计数sort遍历所有
n的元素
一个,其值为
C[0]将
7.类似地,如果
一个有两个
4的,在计数排序遍历了所有的元素之后
一个,
C[4](使用0索引)将等于
2.在这个步骤中,
C记录有多少元素
一个它们具有相同的特定索引值
C.换句话说,指数
C对应于值中的元素
一个,值在
C对应于一个值在
一个出现在
一个.
接下来,修改
C所以,每个
C[我]包含比它小的元素的个数。这可以通过通过
C和替换
C[我]价值与
C[我]+C[我−1].这一步允许计数排序来确定在哪个索引处
B应该放置一个元素。
然后,从末尾开始
一个
,将元素添加到
B的值
一个[我],去
C[一个[我]],表示元素的值
一个[我]来
B[C[一个[我]]].最后,递减的值
C[一个[我]]通过
1自从那个位置出现后
B现在占领。
这个动画演示了计数排序:
[1,2,1,1,3.,1,2,1,1,1]
[0,1,2,3.,4,5,6,7,8,9]
[1,1,1,2,2,4,2,1,2,1]
[1,2,1,2,4,2,2,1,1,1]
考虑到数组
一个,在计数排序算法中
C数组看起来像当它第一次完成(在任何修改之前)?
一个=[0,4,1,7,5,5,6,4,3.,3.,4,2,1,9,8,4,6]