计数排序的稳定性

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行正着遍历才可以保证稳定性。试验后,在此贴出。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,771评论 0 33
  • 回溯算法 回溯法:也称为试探法,它并不考虑问题规模的大小,而是从问题的最明显的最小规模开始逐步求解出可能的答案,并...
    fredal阅读 13,728评论 0 89
  • 题记: 直接插入排序(稳定)-->希尔排序 : 属于插入排序 简单选择排序(稳定)-->堆排序 :属于选择排序...
    Pitfalls阅读 2,831评论 2 3
  • 凋萎的林中响起一声鸟鸣, 它显得空虚,在这凋萎的树林。 可这鸣声又这般地圆润, 当它静止在那创造它的一瞬, 宽广地...
    东丰林波阅读 263评论 0 0
  • 作业布置如下: 1、今天提供的4个原文片段,拆书家已经给出I部分的内容,请大家写完整A1和A2。 2、以简书形式将...
    浅浅的私人世界阅读 755评论 1 2