我需要能够对多个中间结果集进行排序,并按排序顺序将它们输入到文件中。排序基于单个列/键值。每个结果集记录都是值列表(如表中的记录)
我的解决方案:
使用哈希和随机访问文件。由于结果集已经排序,因此在检索结果集时,我会将排序的列值存储为散列映射中的键。散列映射中的值将是随机访问文件中的地址,其中 每条记录与该列值相关联的内容将存储 。
有什么想法吗?
答案 0 :(得分:5)
指向每一组,最初指向第一个条目
然后从集合中选择下一个结果,该结果提供最低的条目
将此条目写入文件并递增相应的指针
这种方法基本上没有开销,时间是O(n)。 (这是Merge-Sort,顺便说一句)
澄清:这是合并排序的 merge 部分。
答案 1 :(得分:2)
如果你有2个预先排序的结果集,你应该能够在编写输出文件的同时迭代它们。您只需要比较每组中的当前行: 简单示例(尚未准备好复制和粘贴使用!):
ResultSet a,b;
//fetch a and b
a.first();
b.first();
while (!a.isAfterLast() || !b.isAfterLast()) {
Integer valueA = null;
Integer valueB = null;
if (a.isAfterLast()) {
writeToFile(b);
b.next();
}
else if (b.isAfterLast()) {
writeToFile(a);
a.next();
} else {
int valueA = a.getInt("SORT_PROPERTY");
int valueB = b.getInt("SORT_PROPERTY");
if (valueA < valueB) {
writeToFile(a);
a.next();
} else {
writeToFile(b);
b.next();
}
}
}
答案 2 :(得分:1)
听起来您正在寻找Balance Line算法的实现。