社区
C++ Builder
帖子详情
对大量数据排序(100万个),冒泡法、选择法等排序方法,哪种最快、效率最高?
GZCPFR
2007-12-11 08:42:20
1、在数据完全无序的情况下,哪种最快?
2、在大部分数据有序的情况下,哪种最快?
请教各位,谢谢!
...全文
3623
29
打赏
收藏
对大量数据排序(100万个),冒泡法、选择法等排序方法,哪种最快、效率最高?
1、在数据完全无序的情况下,哪种最快? 2、在大部分数据有序的情况下,哪种最快? 请教各位,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
margare_wang
2010-09-12
打赏
举报
回复
这么大的数据是怎么读取的啊,我现在要读取一个1000*1000的二维数组,读完后调用的时候内存占用到3G程序就运行不下去了
zhou87feng
2009-11-13
打赏
举报
回复
没有人来总结嘛,有个总结就好了,现在有点乱。
fjye
2007-12-15
打赏
举报
回复
可以试一下stl的stable_sort
示例代码
//---------------------------------------------------------------------------
void TForm1::sort(AnsiString filename)
{
vector< student> vect;
student st1(0, "");
TStringList *pList1,*pList2;
pList1 = new TStringList;
pList2 = new TStringList;
pList2->Delimiter = ',';
pList1->LoadFromFile(filename);
vect.clear();
for(int i=0;i<pList1->Count;i++)
{
pList2->DelimitedText = pList1->Strings[i];
st1.name=StrToInt(pList2->Strings[0]);
st1.score=pList2->Strings[1].c_str();
vect.push_back(st1);
}
stable_sort(vect.begin(), vect.end(),less<student>());
pList1->Clear();
for(int i=0;i<vect.size();i++)
{
pList1->Add(IntToStr(vect[i].name)+","+AnsiString(vect[i].score.begin()));
//ShowMessage(AnsiString(vect[i].name.begin())+","+AnsiString(vect[i].score.begin()));
}
pList1->SaveToFile(filename);
delete pList1;
delete pList2;
}
部分h文件
#include <algorithm>
#include <functional>
#include <vector>
#include <string>
using namespace std;
class student{
public:
student(const int &a, const string b):name(a), score(b){}
int name;
string score;
bool operator < (const student &m)const {
return name< m.name;
}
};
一叶还真不知秋
2007-12-15
打赏
举报
回复
建议使用快速排序或堆排序。
如果在外存储器中,可使用归并排序。
EagleFew
2007-12-14
打赏
举报
回复
如果部分有序可以考虑使用插入排序,或者归并
EagleFew
2007-12-14
打赏
举报
回复
但是快速排序有一个栈的问题.如果数据再多的话,要防止栈溢出!
基本上快速排序是比较快的.也可以考虑一下Shell排序.
还有一点,如果你的数据是基本有序或者部分有序,不要使用快速排序,不然这种排序的速度跟冒泡排序没有什么区别
cczlp
2007-12-14
打赏
举报
回复
建议lz用qsort和std::sort比较一下, 看看有没有差别.
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
Routine Required Header Compatibility
qsort <stdlib.h> and <search.h> ANSI, Win 95, Win NT
laowang2
2007-12-14
打赏
举报
回复
stl
过客猫2022
2007-12-13
打赏
举报
回复
用快速排序就可以了!
cczlp
2007-12-11
打赏
举报
回复
qsort
ydlchina
2007-12-11
打赏
举报
回复
使用数据组件(例如ADO、BDE、dbExpress)读取数据后,就直接读入内存中,不存在另外读取的方法,存在Data中,它是一个Variant类型。
GZCPFR
2007-12-11
打赏
举报
回复
那么也可以把文件分成10个,每个10万行,应该差不多了。StringGrid可以容纳下,滚动也很流畅,就是第一次读入比较慢。
问题是我该怎么把这10万行数据读入内存呢,定义数组吗?有没有其它办法,比如有人提到StringList,但是我不知道怎么用?效果如何?
谢谢大家。
i_love_pc
2007-12-11
打赏
举报
回复
100万行的数据别说排序,就是读取也是个问题!能否放到StringGrid,即使放得能否滚动查看?
建议每次读取部分数据,比如按行读取,指定一个索引值,判断第2列数是否和索引对应,如果对应就读入并写入到StringGrid里。
ydlchina
2007-12-11
打赏
举报
回复
目前排列最快的是索引排序(大牛们都这样说的)。
另外俺知道两种排序方法
1,就是对数据库直接排序。可以使用sql语句对后端数据排序。使用这种方法我觉得对你那两种情况都一样。
2,分段读取后端的数据,然后利用DataSet(BCB的牛技术)一类控件的Data属性。首先判断Data中的数据是否已经排序 如果没有排序就排序,然后再读下一段数据,再判断,以此类推。
那种更快,这得根据实际情况,都有优缺点。
蒋晟
2007-12-11
打赏
举报
回复
放数据库之后排吧
数据库使用的算法比较优化
蒋晟
2007-12-11
打赏
举报
回复
冒泡法本来就是低效算法
GZCPFR
2007-12-11
打赏
举报
回复
数据本来是在一个文件里,文件的格式如下(约100万行):
A,112,B
A,323,B
A,173,B
A,673,B
A,195,B
A,999,B
A,564,B
我想用第二列数据进行升序排列,把排序后结果写到StringGrid里去。
如果申请数组存储后再排序,好象数组也申请的太大了。StringGrid也没有排序功能,有没有什么好办法解决?记得以前看到有人说把数据读入到StringList里面进行排序,不太懂什么意思,请大家指导!谢谢!
Y___Y
2007-12-11
打赏
举报
回复
1.快速排序 比其他优越,也可以分段后归并
2.归并排序应该较好
i_love_pc
2007-12-11
打赏
举报
回复
数据是存在哪里的?内存中,文件中,还是数据库中?
僵哥
2007-12-11
打赏
举报
回复
首先,如此庞大的数据,算法需要考虑存储空间和内存等问题。比如分段排序。
另外,建议把问题发到C/C++版块。
加载更多回复(9)
【八大
排序
算法】插入
排序
、希尔
排序
、
选择
排序
、堆
排序
、冒泡
排序
、快速
排序
、归并
排序
、计数
排序
对这八种算法进行性能测试,随机生成10
万个
数据
,统计
排序
所消耗时间如下:可以看出,三种基本
排序
:插入
排序
、
选择
排序
、冒泡
排序
所花费的时间明显更多。它们的时间
效率
都是O(N2),但是它们的
效率
却有明显差别。插入
排序
最快
;
选择
排序
扫描一遍数组,只需要换两次位置;而冒泡
排序
需要不断交换相邻的元素。因此,
选择
排序
在大型
数据
集中的性能比冒泡
排序
更好。剩下五种
排序
算法跟它们不是一个量级,
数据
量太小看不出明显差别,我们单独用
100
万个
数据
来测试这五种
排序
算法的性能。计数
排序
最快
,但是计数
排序
的使用场景也有限。
【
数据
结构】交换
排序
——冒泡
排序
和 快速
排序
其实经过学习,快速
排序
其实在发明之初并不是
最快
的但是经过多轮改进快速
排序
已经被存在了 c 语言库中就是qsort这是 c 语言库中的快排对于快排人们进行了很多研究当我们要递归的深度过深时我们可以用自己实现的栈来模拟栈中递归【
数据
结构】快速
排序
——非递归实现快速
排序
当然在 c 语言的函数库中不可能搞非递归的方式于是有人研究出了自省
排序
那什么是自省
排序
呢?就是它会检查函数递归的深度当递归的深度到一定程度时,就会转变为别的
排序
如堆排,希尔
排序
。
Python算法之『 冒泡、
选择
、快速
排序
算法的时间性能比较』
关于冒泡、
选择
、快速
排序
算法的Python实现代码,此处不赘述,完整代码请查看: 冒泡
排序
选择
排序
快速
排序
问题1:就这三种
排序
算法而言,快排是否是最优方案? 问题2:冒泡和
选择
的时间复杂度相同,其时间性能表现是否真的相同(或者相差无几)? 一、在数组的无序程度较高的情况下 下面直接比较它们的时间性能,代码如下: if __name__ == '__main__': import numpy import time t = time.time...
排序
算法-冒泡、
选择
、堆、插入、归并、快速、希尔
排序
算法-冒泡、
选择
、堆、插入、归并、快速、希尔
算法分析(3)——冒泡
排序
真的慢吗?
在初学编程的时候,曾经有两个问题让我感到迷惑,第一个是利用中间变量交换另外两个变量,另一个就是冒泡
排序
。但是后来发现,冒泡
排序
几乎是所有
排序
算法中最简并且容易实现的,实际上许多人了解的第一个
排序
算法就是冒泡
排序
。总有人说:“日本人说英语口音太重,听不懂”,就好像没有口音能听得懂一样,人们也经常说冒泡
排序
效率
低下,事实真的如此吗?
排序
的关注点 在分析
排序
之前了解一下
排序
算法的关注点是有...
C++ Builder
13,871
社区成员
102,694
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章