算法复杂度计算

时间:2013-10-23 04:28:49

标签: c arrays algorithm sorting

我开始学习如何在c中编码。 目前,我正在尝试实现一个显示与此类似的输出的程序:

{ 欢迎来到CSE分拣系统


请输入您的大小数组:
请选择以下排序算法之一:
 1 - 冒泡排序
 2 - 插入排序
 3 - 选择排序
 4 - 快速排序
您的选择:

您的数组已使用选择排序x步骤进行排序。

排序后的

数组:}

我的程序大部分已完成,但我无法确定如何计算排序过程中使用的x步数。如何推断算法使用的“步骤”数量?

3 个答案:

答案 0 :(得分:0)

这听起来像一个有趣但有些具有挑战性的问题。 “步骤”本身就很抽象。

说我有一些任意排序功能:

void lameSort(int* array, int length) {
  int i;
  for (i = 0; i < length; ++i) {
    if (array[i] == 5) {
      int tmp = array[i];
      array[i] = array[i - 1];
      array[i - 1] = tmp;
    }
  }
}

你究竟要定义一个“步骤”是什么?你可以说

  • 初始化索引= 1步

  • 将每个数组元素与5 = n步(数组长度)进行比较

  • 初始化临时变量= 1步

  • ......等

你必须以某种方式记住每个“步骤”。

而且,人们通常不会根据确切的步骤来衡量算法的复杂性。它们用Big-O表示法表示运行时间/存储复杂度,最高阶多项式是运行时间。

答案 1 :(得分:0)

通过简单地计算每个程序执行的指令总数,无法比较程序的复杂性。您需要渐近分析,摊销分析等来分析算法的复杂性。在渐近分析中,分析了算法的限制行为

限制行为仅对n≥n 0 有效。快速排序的渐近Big-O复杂度 O(n log n)小于冒泡排序的复杂度 O(n 2 。但是对于n 0 即使在一般情况下,冒泡排序也可以执行快速排序。因此,计算执行比较程序的指令总数的方法可能无法产生正确的结果。

答案 2 :(得分:0)

对于复杂性表示法,请转到here

对于复杂性计算示例,请转到here

这两节课都用非常简单易懂的语言解释