【问题标题】:Is there a simple way to find the time complexity?有没有一种简单的方法来找到时间复杂度?
【发布时间】:2026-01-19 06:45:01
【问题描述】:

我们的老师没有教我们如何分析算法的运行时间,然后她想让我们报告一下 Shell 排序。

我只是想知道是否有一种简单的方法可以找到 shell 排序等算法的平均/最佳/最差情况性能。

//for references

class ShellSort{
  void shellSort(int array[], int n){
    //n = array.length
    for (int gap = n/2; gap > 0; gap /= 2){
      for (int i = gap; i < n; i += 1) {
        int temp = array[i];
        int j;
        for (j = i; j >= gap && array[j - gap] > temp; j -= gap){
          array[j] = array[j - gap];
        }
        array[j] = temp;
      }
    }
  }

【问题讨论】:

    标签: java performance time-complexity shellsort


    【解决方案1】:

    欢迎堆栈溢出!通常,排序算法的时间复杂度是通过执行的键比较次数来衡量的。可以首先考虑需要最少数量的键比较才能完全排序的输入(最佳情况),然后跟进需要最多数量的输入(最坏情况)。通常情况下,最好的情况是排序列表,最坏的情况可能是按相反顺序排序的列表,尽管对于某些分而治之的算法可能并非如此。

    至于平均情况,一旦您得出最佳和最坏情况,您就会知道平均值介于两者之间。如果两者具有相同的时间复杂度类(通常是“Big Oh”类),那么您知道平均值是相同的。否则,您可以通过概率分析从数学上推导出它。

    对于数组上的每个循环,都会增加一个时间复杂度因子“n”,而嵌套循环会“倍增”这种复杂性。即 2 个嵌套循环的复杂度为 n^2,3 个嵌套循环的复杂度为 n^3。

    重复地将一个数组分成两半通常会给您一个时间复杂度因子“log(n)”。

    【讨论】:

      最近更新 更多