Java 有没有一种简单的方法来计算时间复杂度?

Java 有没有一种简单的方法来计算时间复杂度?,java,performance,time-complexity,shellsort,Java,Performance,Time Complexity,Shellsort,我们的老师在让我们报告Shell排序之前,没有教我们如何分析算法的运行时间 我只是想知道是否有一种简单的方法可以找到shell sort等算法的平均/最佳/最差性能 //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;

我们的老师在让我们报告Shell排序之前,没有教我们如何分析算法的运行时间

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

//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;
      }
    }
  }

//供参考
类壳排序{
void外壳排序(int数组[],int n){
//n=数组长度
对于(int gap=n/2;gap>0;gap/=2){
对于(int i=间隙;i=间隙和阵列[j-gap]>温度;j-=间隙){
数组[j]=数组[j-间隙];
}
数组[j]=温度;
}
}
}

欢迎使用堆栈溢出!通常,排序算法的时间复杂度是通过执行的键比较的数量来衡量的。我们可以先考虑哪些输入需要最少的键比较才能完全排序(最佳情况),然后再考虑需要最多的键比较的输入(最坏情况)。通常情况下,最好的情况是排序列表,最坏的情况可能是按相反顺序排序的列表,尽管对于某些分治算法来说可能不是这样

至于平均情况,一旦你得出最佳和最坏情况,你就知道平均值在两者之间有界。如果两者都有相同的时间复杂度等级(通常是“大Oh”等级),那么你就知道平均值是相同的。否则,你可以通过概率分析从数学上得出平均值

对于数组上的每个循环,这将增加时间复杂度因子“n”,嵌套循环将“乘以”此复杂度。即,2个嵌套循环的复杂度为n^2,3个嵌套循环的复杂度为n^3

将一个数组重复划分为一半通常会使时间复杂度因子为“log(n)”