这是算法导论里面的算法,排序算法是稳定的。
思考:
为什么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行正着遍历才可以保证稳定性。试验后,在此贴出。