读书人

面试中的一个排序算法有关问题有兴趣

发布时间: 2012-10-15 09:45:25 作者: rapoo

面试中的一个排序算法问题,有兴趣的道友一起来看看,给出你的想法
1.const和define定义的类型是一样的?(这样问,答案应该是错误的吧,若是#define定义的常量才算对的?)

2.一组无序的数据,有n个,如a[]={4,2,4,23,53,1,1,32,8},求排序算法,要求时间效率为O(n),空间效率O(1),使用交换,而且一次只能交换两个数。(这个排序算法,当时做的时候一点头绪都没有,每次 对于这种要求时间效率和空间效率的算法,都不知道从何处入手,请大大虾们支支招吧,你们遇到这种问题,一般怎么处理?)

[解决办法]
时间复杂度o(n),我所知道的只有计数排序,得知道a[i]的范围,最好是整数,空间复杂度也不是o(1),等大神。
[解决办法]
1.任何情况都不对,即便定义常量也不一样,而且不算define,但就是C和C++的const的语义也不一样

2.题目有问题吧,使用交换排序不可能做到任意情况时间复杂度O(n),只有最好情况是的,你这一题到可以这样做,用计数排序,因为如果按示例数据那样不超过255的话,计数排序只需要一个额外的255单位的数组,也算是常数空间
[解决办法]
这个有点类似 可以看看 http://www.dewen.org/q/6207/%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%A7%BB%E4%BD%8D%EF%BC%8C%E6%9C%89%E6%97%B6%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6%E5%92%8C%E7%A9%BA%E9%97%B4%E5%A4%8D%E6%9D%82%E5%BA%A6%E8%A6%81%E6%B1%82#12687
[解决办法]
1) define叫宏,const在C和C++中有很大区别。可以说,这两个东东完全完全不同

2) comparison sort的下界是n*lgn,利用decision tree可以证明,详见<算法导论>(第三版) Chapter 8

所以你的那个排序,只能是counting sort。楼上的已经写了,不罗嗦了

读书人网 >C++

热点推荐