现在的位置: 首页 > 综合 > 正文

线性时间排序(一)C语言

2013年10月07日 ⁄ 综合 ⁄ 共 1950字 ⁄ 字号 评论关闭

  <<AtA>>上的一道思考题.昨天开始琢磨,今天又琢磨到现在.我承认我脑袋比较迷糊,但也有点慢得让我接受不了了."不急跬步,无以至千里;不积小流,无以成江海",只能如此安慰自己了.呵呵.

  问题本身就是,给定 N 个数的集合S, S {X | X ∈ S, 0 <= X <= k).恩.书上是1,我这里出现的是0.多了个数罢了.要求是,修改计数排序,以完成在 O (N + K) 时间完成排序的任务,并且只能使用 O (K) 的存储空间.

  昨天刚看到的时候,比较迷糊.后来,搜了一下,便发现了方法.我想说的是,一旦我想照着别人去做,我往往做不好.并非就是如此给自己定义了,而确实是这回事呢.呵呵.自己知道方法后,安心地去写,其实还是可以的.老想着现成的东西是怎么做的,很难做好.还好,最终写出来了.不然心就堵死了,一晚上得憋气死...

  核心的思想就是,把元素放在正确的位置上,放置完一种值,就将该值的计数 -1 , 当该值计数为 0 时,也就是,所有的此种值都已在正确的位置上,再次遇到无需处理,直接越过.直到,处理完所有数据.

  我说得比较乱,呵呵.代码要来了,看代码吧.


抱歉!评论已关闭.