读书人

对文件内容排序请问(不用命令用程

发布时间: 2012-02-21 16:26:23 作者: rapoo

对文件内容排序,请教(不用命令,用程序实现)
文件:

内容每一行有10个字符和一个换行符组成。
文件行数不确定。


我用字符读文件,一行一行的读取,存入 一数组中,但是等到文件读完,也只能是做了一次排序,排序方法相当于冒泡排序。


能否给出其它能解决问题的方法。谢谢


[解决办法]
你得把所有行都读到内存里,然后排序,保存回去
如果你用c++,可以用vector <string>

vector <string> vs;
ifstream ifile( "... ");
string str;
while (ifile) {
ifile > > str;
vs.push_back(str);
}
ifile.close();
sort(vs.begin(), vs.end());
ofstream ofile( "... ");
for (int i=0; i <vs.size(); i++)
ofile < < vs[i] < < endl;
ofile.close();
[解决办法]
一次只缓存一行实在是太麻烦了,为什么不多读一些进内存呢?如果有限制不能全读进内存的话,可以多路归并嘛。
[解决办法]
一次可以开1/8 -- 1/4内存进行排序。之后归并。
[解决办法]
如果数据量小,就用内排序应付了
数据量大,就得外排序

1.使用多路排序
文件内排序-〉多路文件同时排序(插入算法)-〉输出文间

2.使用中间文件
file1+file2-> temp
temp+file3-> temp
...
这个算法我尝试过,毕竟磁盘IO是很慢的...

建议你好好研读一下《编程珠玑》,他对这类排序问题讲得很透彻
[解决办法]
既然每行长度相同,可用使用mmap映射到内存后,用堆排序,效率要比冒泡高不少.

读书人网 >C语言

热点推荐