首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab排序算法

Matlab排序算法
EN

Stack Overflow用户
提问于 2016-05-28 01:11:17
回答 2查看 1.2K关注 0票数 0

在Matlab中,我一直在研究各种排序算法,如合并、冒泡、快速和桶式排序,并提出了一些问题。它指出插入排序、冒泡排序和快速排序的运行时间为O(n^2),而合并和桶的运行时间为O(nlog(n))。我想知道,如果最后两个更快,为什么使用前三个中的任何一个。如果列表排序更多/排序更少、更大/更小等等,它们会更快吗?还是还有其他原因?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-28 01:55:25

插入排序用于已知非常小的数组,因为在这种情况下,插入排序通常是最快的。

快速排序在实践中经常使用,因为它期望N个日志N时间,在大多数情况下是相当快的,并且适用于数组--您不需要分配备份数组。

合并排序用于链接列表,有时用于数组,当您确实需要O(N log N)时间或您确实需要一个稳定的排序。(快速排序不稳定)。对数组使用合并排序要求您分配一个备用数组,您可以在合并期间将其用作临时存储。

桶排序只适用于某些类型的数据,因此它并不常见,但您可以在数据合适时使用它来取得良好效果。它通常也被认为是O(N)

当您不需要稳定的排序,并且确实需要O(N,log )时间时,堆排序用于数组。它也不稳定,而且在大多数情况下它比快速排序慢。

哦,至于泡泡那类..。好吧,没人用泡泡排序

票数 3
EN

Stack Overflow用户

发布于 2016-05-28 02:04:08

我不知道这将如何适用于Matlab,因为我不知道它的排序算法是如何实现的。

除了基排序(在排序整数数组时速度最快)以外,在接近随机数据的情况下,快速排序和合并排序的平均时间是接近的,但是合并排序需要O(n)空间。合并排序是稳定的(保留相等元素的顺序),而快速排序则不稳定。

快速排序比合并排序更多比较,但移动更少。哪个更快受此影响。如果使用用户定义的函数进行比较,合并排序通常会更快一些。

在有16个寄存器的处理器上,例如64位模式的PC,4路合并排序将比快速排序或标准的双向合并排序要快一些。4路合并排序进行1.5倍的比较,但0.5次移动,所以基本操作的总数是相同的,但是比较更容易缓存,所以4路比较更快一些。对于大型随机整数数组,这些排序方法之间的差异通常小于10%,因此实际差异不大。

多核处理器上的多线程产生了很大的不同。我对一个由1600万个伪随机32位整数组成的数组进行了排序,一个四个线程(自下而上/迭代)合并排序的速度是单个线程(自下而上/迭代)合并排序的3倍(0.5秒对1.5秒)。主要的好处在于每个核心的本地缓存中有多少排序。

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

https://stackoverflow.com/questions/37494274

复制
相关文章

相似问题

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