计数排序的稳定性

计数排序的稳定性_第1张图片
Paste_Image.png

这是算法导论里面的算法,排序算法是稳定的。

思考:

为什么9~11的for循环里要倒着遍历?
这样倒着遍历,而且放进去一个就将C数组对应的值(表示前面有多少元素小于或等于A[i])减去一。如果有相同的数x1,x2,那么相对位置后面那个元素x2放在(比如下标为4的位置),相对位置前面那个元素x1下次进循环就会被放在x2前面的位置3(因为C[A[J]]--)。从而保证了稳定性。

2016.3.6更新

思考:为什么计数排序是稳定的?为什么第9行要倒着遍历?

解决:
稳定性在于:在程序6,7行执行结束后,C数组中的元素C[i]代表着:小于等于i的输入元素的个数。
而9-11行倒着遍历时,如上述所说。

关键是 C[i]代表着:小于等于i的输入元素的个数。

那么,如果 C[i]代表着:大于等于i的输入元素的个数。我想9-11行正着遍历才可以保证稳定性。试验后,在此贴出。

你可能感兴趣的:(计数排序的稳定性)