如何分析排序算法?

时间:2011-06-06 16:10:11

标签: c algorithm profiling

我在C中编写了一些排序方法,我希望找到程序最佳的输入大小(即)分析每个算法。但是我该怎么做?我知道每种方法的时间,但我不知道如何找到“最佳”的大小。

3 个答案:

答案 0 :(得分:3)

这取决于一些因素:

  • 数据行为:您的数据是否已经部分排序?或者它是随机的?

  • 数据大小:对于大输入(比如1千或更多),您可以确保O(N ^ 2)排序方法将丢失为O(N * log(N) )方法..

  • 数据的数据结构:是数组还是列表还是?对于列表
  • 之类的东西,对数据进行非顺序访问的排序方法会更慢

所以答案是通过经验运行你的程序,你可能会通过改变输入大小来处理一些真实的数据。

当输入大小为> X时,较慢的方法(如O(N ^ 2))会被某种更快的方法(如O(N * log(N))打败)那么你可以说速度较慢对于输入大小<= X,该方法'经验最优'(该值取决于输入数据的特征)。

答案 1 :(得分:1)

排序算法没有一个最佳的数字。

对于纯执行时间,几乎每种排序算法在一组2个数字上都是最快的,但在大多数情况下它没用。

某些排序算法可以在较小的数据集上更有效地工作,但这并不意味着它们在该大小上是“最优的”。

某些种类也可能更好地处理数据的其他特征。如果数据几乎已经排序,那么可以非常有效地进行各种排序,但如果不是这样,则可能非常慢。其他人将在给定大小的任何一组上运行相同的。

查看排序的大O(例如O(n ^ 2),O(n log n)等)以及排序具有的任何特殊属性(例如对近似排序的数据进行操作)更有用。

答案 2 :(得分:0)

要找到程序最佳的输入大小(我假设你的意思是最快的,或者排序算法需要最少的比较),你必须针对各种输入进行测试并绘制独立的轴图(输入大小)对依赖轴(运行时)并找到最小值。