您的位置:首页 > 其它

算法导论8-2 以线性时间原地排序

2012-12-21 21:32 225 查看
假设有一个有n个数据记录组成的数组要排序,且每个记录的关键字的值为0或1。排序这样一组记录的一个算法应具备如下三个特性中的一部分。
1)算法的运行时间为O(n)。
2)算法是稳定的。
3)算法是原地排序的,它可以使用除输入数组以外的固定量的存储空间。
a)给出一个满足上述条件1和条件2的算法。
b)给出一个满足上述条件1和条件3的算法。
c)给出一个满足上述条件2和条件3的算法。
d)在a)~c)中给出的算法能否用来在O(bn)时间内排序,对有b位关键字的n个记录进行基数排序?如果行,说明如何做;如果不行,说明原因。
e)假设一个n个记录中每个的关键字都介于1到k之间。说明如何修改计数排序,使得可以在O(n+k)时间内对n个记录原地排序。除输入数组外,可另用O(k)的存储空间。你给出算法是稳定的吗?(提示:当k=3时应该如何做)

解答提要:
a)计数排序
b)快排的划分思想,因为只有0,1故而一次划分即可
c)插入排序之类的都可以
d)第一个可以,第二个不行(不稳定),第三个也不可以(时间效率)
e)思路,计数排序,使用两个数组A
,C[k],其中A味输入数组,C为记录各数字出现次数的数组,然后直接由C生成输出数组存放在A中。 不稳定的!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: