首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于洪量数据的排序,求思路

2013-03-21 
关于海量数据的排序,求思路有一个几百万条记录的文件,记录的结构体为:typedef struct{uint32 song_id//歌

关于海量数据的排序,求思路
有一个几百万条记录的文件,记录的结构体为:


typedef struct
{
uint32 song_id;//歌曲ID
uint32 singer_id;//歌手ID
char   initial[8];//歌曲名首字母
char   song_title[20];//歌曲名称
}RCD_SONG;

要求以歌手ID进行排序,歌手ID相同的记录可以无序。前提是硬件内存有限,只能采取外部排序。求思路!谢谢! struct c
[解决办法]
uint32 singer_id;    //歌手ID

这个多少位?

用一个数组,用singer_id作为下标(最大值如果为10亿,全世界没那么多歌手)。
数组值只为0或者1,用一个bit存储即可。

声明一个可以包含10位整数的bit 数组(10 亿) ,一共需要120M 内存 

接下来,不多说,你懂的。
[解决办法]
最近了解了下levelDB
它的排序方法楼主可以去看下,
我受其启发,想了一个算法,只需要很少的内存。

楼主看下
step1 依次读入n条记录,比如n = 1000,在内存中排好序.写成一个文件file1 。 标记这n个最大最小值. file1 max, file1 min. 把信息储存到一个表table_index中。

step2 重复step 1 , 遍历所有的记录,得到m个文件以及标table_index。

step3 检查table中,所有文件的最大最小时是否有交错,若没有,退出,排序完成。 若有,按照从最小到大的文件顺序将交错文件作为输入,进行归并排序。输出为n条一个文件,更新table_index. 

重复step3 知道排序完成

热点排行