计数排序假设每个
n列表中的输入元素的键值范围为
0来
k,对于某个整数
k.对于列表中的每个元素,计数排序决定比它小的元素的数量。计数排序可以使用此信息将元素直接放置到输出数组的正确槽中。
计数排序使用三个列表:输入列表,
一个[0,1,...,n],输出列表,
B[0,1,...,n],以及一个充当临时记忆的列表,
C[0,1,...,k].请注意,
一个和
B有
n插槽(每个元素的插槽),而
C包含
k槽(每个键值的槽)。
计数排序从遍历开始
一个
,和每个元素
一个[我],它的索引是
C它的值等于
一个[我](所以它去
C[一个[我]]的值增加
C[一个[我]]由一个。这意味着如果
一个有七个
0' s在它的列表中,在计数排序完成所有操作之后
n的元素
一个,则为
C[0]将
7.类似地,如果
一个有两个
4的,计数排序遍历了所有的元素
一个,
C[4](使用0索引)将等于
2.在这个步骤中,
C跟踪有多少元素
一个它们具有相同的特定索引值
C.换句话说,指数
C对应于值中的元素
一个,值在
C对应于一个值在其中的总次数
一个出现在
一个.
接下来,修改
C所以,每个
C[我]包含比它小的元素数。这可以通过通过
C和替换
C[我]价值与
C[我]+C[我−1].这个步骤允许计数排序确定在哪个索引中
B一个元素应该被放置。
然后,从结尾开始
一个
,添加元素
B通过检查的值
一个[我],去
C[一个[我]],表示at元素的值
一个[我]来
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]