我有一个包含10行的文本文件。每行有10个以逗号分隔的元素,这些元素已经按行排序,如:
3463,34957,44443,50481,71036,73503,74289,76671,82462,92527
1456,2731,18159,20440,32962,38562,49321,64220,67615,72541
1073,6217,9695,27372,30624,38021,47851,68479,76834,88021
7930,11882,17681,27267,32131,45096,59008,69156,72843,94146
2381,4359,30194,40730,73714,74721,75127,78830,86753,89475
1466,21335,21369,23342,36973,50888,67891,78069,90346,99970
15015,16628,21012,25483,42387,42519,45472,49552,57193,71449
1751,8833,35433,39972,44475,47604,51601,59108,87957,94764
10728,17248,31885,41453,41479,54785,81400,83554,86014,87105
228,9479,25187,50956,70720,71878,78744,84341,86637,88225
现在我想在不打扰行顺序的情况下对这100个元素进行排序(即:最小数字(228)应该在第一个位置,最大数字(99970)应该在最后一个位置,我需要存储那些完全排序的数字到另一个文件。
我在Array中添加这些数字时遇到问题,然后我想知道如何对它们进行排序。约束条件不应超过10个元素,一次应在RAM中。
我已经开始为此目的编写一些代码来从文件中获取数据:
public static void main(String args[])
{
File file = new File("SortedLines.txt");
FileInputStream fis = null;
String st;
try
{
fis = new FileInputStream(file);
int content;
while ((content = fis.read()) != -1)
{
// convert to char and display it
System.out.print((char)content);
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
答案 0 :(得分:0)
每行:
','
new Integer[splittedString.length]
,遍历字符串数组,使用Integer
从该字符串创建Integer.parseInt(..)
并将其放在创建的Integer[]
的适当位置Arrays.sort(..)
醇>
答案 1 :(得分:0)
如果要排序的数字符合您上面提到的顺序,您只需使用Arrays.sort():
创建一个包含所有数字的数组(我理解这些是整数),比如myUnsortedArray
致电Arrays.sort(myUnsortedArray)
。
那应该做排序数组的工作。然后,您可以按照自己的方式进行转换。
希望这有帮助。
答案 2 :(得分:0)
以上答案的评论似乎在这里稍微改变了问题。你说的问题如下:
实际上我有一个包含1000个条目的100万个文件 * 1000矩阵形式,我一次不能在RAM中使用超过10000个元素
然后:
"你获得了数百万的数字,你必须找到第100名 最小的数字。"问题约束:不超过10,000个元素 可以一次在RAM中
我建议您编辑原始问题以反映此问题 - 如果这确实是您要解决的最终问题。
我对你的问题的理解是:你必须在1000 * 1000矩阵中找到第100个最小的数字(请注意:这与相当不同于说你的#1; 1百万个数字),约束条件是内存中不能超过10,000个数字。如果我是正确的,可能的解决方案可能是:
minValues
Arrays.sort()
。a
和b
a < x < b
是否为minValues
。如果是这种情况,请在b
中插入值。这会自然地将最后一个元素推出数组,因此您必须更改minValues
b
将包含矩阵中最小的100个元素,只需选择最后一个(即MinValues
),这将是您的第100个最小元素。您可以使用任何值对此方法进行参数化(例如,如果您需要最小的第157个元素),并且内存占用
100个元素(
a
)+ 1000个元素(下面的行) 检查)+ 2(b
和{{1}})= 1102个元素
仍然低于最大10.000元素限制。速度方面的性能可能不是很好,但这种要求并不在图中 - 无论如何,在小内存要求下处理大量数据时,您必须交换一些性能。
我喜欢听到更好的方法来实现目标。
编辑:我建议您查看Frederickson and Johnson algorithm。它解决了O(K)时间内的问题,其中K是之后的元素(在你的情况下为100)。但不确定内存占用情况。
希望这有帮助。