Beispiel #1
0
                public static void Merge(StreamReader[] streams)
                {
                    int N = streams.Length;
                    IndexPriorityQueue <string> pq = new IndexPriorityQueue <string>(N);//最大堆,从大到小排序

                    for (int i = 0; i < N; ++i)
                    {
                        if (!streams[i].EndOfStream)
                        {
                            pq.Insert(i, streams[i].ReadLine());//i是保存的元素的流在数组的索引
                        }
                    }
                    while (!pq.IsEmpty())
                    {
                        Console.WriteLine(pq.Min());
                        int i = pq.DeleteMin();
                        if (!streams[i].EndOfStream)
                        {
                            pq.Insert(i, streams[i].ReadLine());//替换为新的值
                        }
                    }
                }