首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++中的快速排序速度很慢

C++中的快速排序速度很慢
EN

Stack Overflow用户
提问于 2009-07-30 19:25:33
回答 8查看 3K关注 0票数 1

我有9个矩阵形式的值,需要在模拟过程中计算这些值的中位数。

我在C++中使用快速排序(即qsort()),这会导致进程运行缓慢(因为这个进程会迭代几次)。

有没有我可以使用的更好的排序算法?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2009-07-30 19:39:01

排序以获得中位数的效率非常低。您可以改用STL nth_element:

代码语言:javascript
复制
#include <algorithm>

// Assuming you keep the elements in a vector v of size len

std::nth_element( v.begin(), v.begin()+len/2, v.end() );
median = v[len/2];

 //... or, if the elements are in a simple array v[len], then

std::nth_element( v, v+len/2, v+len );
median = v[len/2];

注意: nth_element将修改向量/数组v。如果需要保留原件,请先制作副本。

票数 19
EN

Stack Overflow用户

发布于 2009-07-30 19:32:01

请,请永远不要推荐泡泡排序,除非受虐狂!

对于较小的值,insertion sort是最好的,它适用于其他应用程序(几乎排序的任何长度的数据)。

编辑:清理了格式,强调了建议答案。

票数 9
EN

Stack Overflow用户

发布于 2009-07-30 19:30:07

只有9个值?快速排序是过度杀伤力。

在处理较小的数据集时,可以使用插入排序、冒泡排序或其他更简单的排序算法。

Performance

冒泡排序的最坏情况和平均复杂度都是О(n²),其中n是要排序的项数。存在许多排序算法,它们的最坏情况或平均复杂度为O( n )。甚至其他О(n²)排序算法,如插入排序,往往比冒泡排序具有更好的性能。因此,当n较大时,冒泡排序并不是一种实用的排序算法。

然而,诚然,你甚至不需要像其他人建议的那样排序来获得中位数。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1208766

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档