首页 新闻 会员 周边

一个排序算法问题

0
悬赏园豆:10 [已解决问题] 解决于 2010-12-12 14:08

假如有下面的先后排序:

c->a->b

a->d

d->b


有没什么算法可以得出最后这样的先后次序队列?

c->a->d->b

vento的主页 vento | 菜鸟二级 | 园豆:237
提问于:2010-10-23 22:20
< >
分享
最佳答案
0
大概思路就是取每个子队列中的第一个值,然后重新排序取其中最大值,出队到结果队列。
下面就以int值为例,当然算法还需优化,如除了第一次外,其他时候每个队列第一个元素不需这样重新
比较,如果按照插入排序效果会更好些。

改方法用于子队列较多时较好,当然如果只有一个是很长的,而子队列好少,直接使用插入排序更高效

List<Queue<int>> queues =new List<Queue<int>>()
{
new Queue<int>(new int[]{33,23,4}) ,
new Queue<int>(new int[]{11,3}) ,
new Queue<int>(new int[]{3,2})
};

Queue
<int> result = new Queue<int>();
int sumQueueCount = queues.Sum(p => p.Count);
for (int i = 0; i < sumQueueCount; )
{
int first= queues.Where(p => p.Count > 0).Where(p=>p.Count>0).Select(p => p.First()).OrderByDescending(p => p).First();
queues.ForEach((item)
=>
{
if (item.Count>0&&item.First() == first)
{
result.Enqueue( item.Dequeue());
i
++;
}
});
}
收获园豆:10
LittlePeng | 老鸟四级 |园豆:3445 | 2010-10-24 00:44
其他回答(1)
0

这个就是一个排序问题啊,把它们全部集合到一个数组中,然后用排序算法进行排序。

fuzhonggen | 园豆:205 (菜鸟二级) | 2010-11-26 17:13
什么冒泡啊,最优排序啊,放到一个数组后,想用那种都随便
支持(0) 反对(0) fuzhonggen | 园豆:205 (菜鸟二级) | 2010-11-26 17:14
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册