您的位置:程序门 -> c/c++ -> c++ 语言



对2000000数据进行排序


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


对2000000数据进行排序[已结贴,结贴人:xian467]
发表于:2007-04-16 10:11:50 楼主
文件y中的数据格式为:
a段 ¦b段 ¦(如:8613570282030 ¦460000210732030 ¦)

数据量:
2000000

要求:
1、将文件中的数据以a段为排序字段进行排序,并输出到文件a
2、将文件中的数据以b段为排序字段进行排序,并输出到文件b
3、需计算两次排序处理过程所需要的时间(如数据装载时间、排序时间),以毫秒为单位
发表于:2007-04-16 10:27:571楼 得分:0
用文件内存映射。
话又说回来了,如果物理内存比文件大小还大200m就直接读入内存。
发表于:2007-04-16 10:32:272楼 得分:0
我是这样做啊,但这样我用了一个二维的指针数组,我是这样定义的,
char   **a_segment   =new   char*[maxsize];
for(int   i=0;i <2000000;i++)
a_segment[i]=new   char[15];

怎样回收动态内存最快啊
发表于:2007-04-16 10:40:283楼 得分:0
分配-〉使用-〉释放
-
在最近不用的地方释放
发表于:2007-04-16 10:40:534楼 得分:0
释放后要置空
发表于:2007-04-16 10:44:395楼 得分:0
关键是在循环2000000次来释放指针数组时太久拉,有没有快点的方法啊
发表于:2007-04-16 11:01:596楼 得分:0
导到数据库里吧
发表于:2007-04-16 13:16:557楼 得分:0
这个ms   是手记号码和imsi   的数据,呵呵
unix   下直接用sort   -n   +1   ,不是一般的快
发表于:2007-04-16 17:59:398楼 得分:20
char   buflist   =   new   char[max_count*40];

我建议这么做,     然后根据算法     40   个char   为一组进行   操作
typedef   struct   _data
{
      char   number[40];
}   data,   pdata;

pdata   pdata   =   buflist;
int   index   =   0;

释放确实很慢,需要30多秒,     不过排序我觉得也会很慢。    
to   cmouse(红尘一客)     你的方法根本不行
发表于:2007-04-16 19:05:579楼 得分:0
排序的话,2百万个数,箱子排序法能快一点吧
发表于:2007-04-16 19:16:4610楼 得分:0
做成链表,快速排序。排60000数据,0.x秒。2000000条也应该很快吧。
或是像楼上有人说的,导入数据库,再从数据库导出,是最方便的方法,可
不一定是最快的。
发表于:2007-04-16 20:26:1511楼 得分:0
内存映射,然后用qsort
发表于:2007-04-16 22:15:1812楼 得分:0
快速排序   +   线程池来做是不是好点
就是先把整个数据块分成俩部分,set   a   的任何数都要大于set   b
然后用同样的方法来划分set   a和set   b,因为他们的数据是无关的,可以用多线程来提高速度。
发表于:2007-04-16 22:45:2413楼 得分:0
我觉得这样申请释放一次内存,然后对指针排序速度还是比较快的
当然也可以用set提供指针比较方法,在构造的时候排序
struct   data{
char   a[15];
char   b[15];
}
data*   p   =     new   data[2000000];

vector <data*>   v(p,p+2000000);

sort(v.begin(),v.end(),);写个函数对象对指针进行排序
//写按照指针的顺序写入文件.


delete[]   p;
发表于:2007-04-17 09:29:1014楼 得分:0
自己觉得还是链表比较快...
删除链表也快..
发表于:2007-04-17 09:57:5015楼 得分:0
小数据上vector比list占优
发表于:2007-04-17 10:00:1516楼 得分:0
既然已知是20w条,就直接先分配内存

struct   data{
char   a[15];
char   b[15];
}

data   mydata[200000];

这样的话就避免了后面的delete[]   xxx,而会由系统自己回收内存,速度应该会快一些吧。
发表于:2007-04-17 14:12:4217楼 得分:0
没有这么大的概念
发表于:2007-04-17 15:55:1318楼 得分:0
三教九流
发表于:2007-04-18 09:02:3219楼 得分:0
mark一下,以后看


快速检索

最新资讯
热门点击