大数据排序c++

yzp15266986617 2010-04-22 09:27:04
一个二维数组
char[25000000][40];
要求按第二维的数据中的四十个字符进行排序,
怎么排序最快呢?
c++实现
...全文
204 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
sundl2268 2010-05-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 ppower 的回复:]
內存放不下時,你可以分段排序。

1、將大文件切割成一個個小文件,保證每個小文件可以全部放入內存排序。
2、分別對 File1......FileN 排序,並索引,File1......FileN的最大值,最小值,數量。找出全部文件的最大最小值。
3、重新分段 File1......FileN ,保持每段最大值最小值不干涉。
4、將數據放入文件中。保證每個文件均可全部放入內存並排序,如果……
[/Quote]
想法很好哦,学习了
勉励前行 2010-04-30
  • 打赏
  • 举报
回复
內存放不下時,你可以分段排序。

1、將大文件切割成一個個小文件,保證每個小文件可以全部放入內存排序。
2、分別對 File1......FileN 排序,並索引,File1......FileN的最大值,最小值,數量。找出全部文件的最大最小值。
3、重新分段 File1......FileN ,保持每段最大值最小值不干涉。
4、將數據放入文件中。保證每個文件均可全部放入內存並排序,如果文件超大則修改最大最小值,並放入下一文件中。
5、全部文件重新排序完成,將 File1......FileN 合並成一個大文件。

單文件排序用std::sort就好了。
(如果可以用數據庫,用數據庫一句 order by 就行了。)
yzp15266986617 2010-04-30
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 hongss 的回复:]
去Google一下 快速排序 或者 QucikSort ,很多的

这种排序方式,尤其是在数据量比较大的情况下,比 冒泡法排序 速度快很多
[/Quote]
编译不了啊?
有错误
yzp15266986617 2010-04-30
  • 打赏
  • 举报
回复
谢谢楼上的,可是我的二维数组是在外存里
内存放不下去
那怎么办呢?
Waiting4you 2010-04-27
  • 打赏
  • 举报
回复
这个二维数组是在内存里的吗,如果是的话直接用sort算法就可以了:
#include <iostream>
#include <algorithm>
using namespace std;

//这个结构的内存布局和char[40]兼容
//用于作为sort算法的迭代器
struct array_t{
char data[40];
};

//比较,当然也可以写到array_t里的operator<方法
bool arrayless(array_t &a, array_t &b)
{
return memcmp(a.data,b.data,40) < 0;
}

int main(int argc, char* argv[])
{
//这里演示5组数据,你的25000000好大,不能放在栈里的
char data[5][40]={
"abc",
"123",
"你好~~",
"hello world",
"yun"
};

//转换成array_t*类型(我说过,是兼容的),把pData作为迭代器
array_t *pData = (array_t *)data;
//用sort算法排序,sort使用的就是快速排序算法
std::sort(pData, pData+5, arrayless);
//输出,看看是不是排好序了
for(int i=0; i<5; i++)
cout << data[i] << endl;

return 0;
}
ImJaden 2010-04-26
  • 打赏
  • 举报
回复
算法问题,学习中
hongss 2010-04-26
  • 打赏
  • 举报
回复
去Google一下 快速排序 或者 QucikSort ,很多的

这种排序方式,尤其是在数据量比较大的情况下,比 冒泡法排序 速度快很多
柯本 2010-04-25
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yzp15266986617 的回复:]
还是不会,大家都没说清楚
,那用文件呢
如何把4个0.3G的文件组合成一个新文件
而且要格式和原来的四个一样(有\n)
[/Quote]
这个可直接调用DOS命令,速度很快的
copy /b file1+file2+file3+file4 newfile
tulipcaicai 2010-04-25
  • 打赏
  • 举报
回复
不懂,观注
yzp15266986617 2010-04-25
  • 打赏
  • 举报
回复
还是不会,大家都没说清楚
,那用文件呢
如何把4个0.3G的文件组合成一个新文件
而且要格式和原来的四个一样(有\n)
lhy 2010-04-22
  • 打赏
  • 举报
回复
快速排序吧
YeBinYe 2010-04-22
  • 打赏
  • 举报
回复
(1)若n较小(如n≤50),可采用直接插入或直接选择排序。
当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。
(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;
(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。若要求排序稳定,则可选用归并排序。
YeBinYe 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 yzp15266986617 的回复:]

电脑2G的内存 用mutimap排1G的数据可行吗?
[/Quote]估计够呛
yzp15266986617 2010-04-22
  • 打赏
  • 举报
回复
电脑2G的内存 用mutimap排1G的数据可行吗?
yzp15266986617 2010-04-22
  • 打赏
  • 举报
回复
multimap够大吗?
yzp15266986617 2010-04-22
  • 打赏
  • 举报
回复
内存为2G
boych 2010-04-22
  • 打赏
  • 举报
回复
难,实现估计蛮复杂的
yzp15266986617 2010-04-22
  • 打赏
  • 举报
回复

快速排序怎么实现呢?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧