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());//替换为新的值 } } }