【排序问题】向包含有序整数文件中插入整数
输入:
1、一个包含有序整数的数据文件名,整数之间用空格隔开,如1 2 3 4 5
2、一个整数,如3
输出:
无
操作:
将指定的一个整数插入数据文件合适位置,使数据文件多一个数据,且仍然是有序的,例子中该文件将为1 2 3 3 4 5
说明:
1、原数据文件可能很大,如4GB甚至更大,无法将所有整数读入内存。
2、用C语言实现
我首先想到的方法是用c提供的文件操作函数,fopen,fprintf,fscanf,fgetpos,fsetpos实现。可是这个方法在找到插入位置后,插入整数后会将后面的数据覆盖。
我想到的第二个方法是,建立一个新文件,将原数据文件+整数依次写入新文件。这样能实现功能,但如果这个操作执行很多次,如1G次,反复的文件创建、读写操作很浪费时间。
请各位提供思路,不胜感激!!
备注:这个问题实质上就是利用文件映射内存进行大文件内数据排序问题。