您的位置:首页 > 理论基础 > 数据结构算法

数据结构实现之索引优先队列用例(多路归并)

2016-01-24 17:36 232 查看
下面的用例调用了IndexMaxPQ的代码MultiWay解决了多项归并问题:它将多个有序的输入流归并成一个有序的输出流。许多应用中都会遇到这个问题。输入可能来自于多种科学仪器的输出(按时间排序),或是来自多个音乐或电影网站的信息列表(按名称或艺术家名字排序),或商家交易(按账号或时间排序),或者其他。

如果有足够的空间,你可以把它们简单地读入一个数组排序,但如果使用了优先队列,无论输入有多长你都可以把它们全部读入并排序。

package xwq.sort;

import xwq.dt.IndexMaxPQ;
import xwq.util.In;
import xwq.util.StdOut;

public class MultiWay {

public static void merge(In[] streams) {
int N = streams.length;
IndexMaxPQ<String >  pq = new IndexMaxPQ<String>(N);
for(int i = 0;i < N;i++) {
if(!streams[i].isEmpty())
pq.insert(i, streams[i].readString());
}
while(!pq.isEmpty()) {
StdOut.print(pq.maxKey()+" ");
int i = pq.delMax();
if(!streams[i].isEmpty())
pq.insert(i, streams[i].readString());
}
StdOut.println();
}

public static void main(String[] args) {
int N = args.length;
In[] streams = new In
;
for (int i = 0; i < N; i++)
streams[i] = new In(args[i]);
merge(streams);
}
}


这段代码调用了IndexMaxPQ来作为命令行参数输入的多行有序字符串归并为一行有序的输出。每个输入流的索引都关联着一个元素(输入中的下个字符串)。

初始化之后,代码进入一个循环,删除并打印出队列中最小的字符串,然后将该输入的下一个字符串添加为一个元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: