大概思路就是取每个子队列中的第一个值,然后重新排序取其中最大值,出队到结果队列。下面就以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++;
}
});
}
这个就是一个排序问题啊,把它们全部集合到一个数组中,然后用排序算法进行排序。