数据结构入门,求解算法的时间复杂度

递归函数的执行次数
#include<stdio.h>
void fun(int a[], int n, int k)
{
 int i;
 if (k == n - 1)
 {
  for (i = 0; i < n; i++)
  {
   printf("%5d", a[i]);
  }
 }
 else
 {
  for (i = k; i < n; i++)
   a[i] = a[i] + i * i;
  fun(a, n, k + 1);
 }
}
int main()
{
 int b[10] = { 1,2,3,4,5,6,7,8,9,10 };
 int m, h;
 int *p = &m;
 *p = 10;
 fun(b, *p,0);
 return 0;
}

先考虑第一种情况,k==n-1时,执行时间为n
其他情况,执行次数为n-k次,在k到n之间执行,次数为n-k,执行时间为T(n,k+1),而当k=n-1时,结束程序

所以,时间复杂度是1到n-1,即[n(n+1)]/2 - 2+n = n^2/2+3n/2-1 =>O(n^2)

计算平均时间复杂度
int fun(int a[],int n ,int i)
{
 int j ,max = a[0];
 for(int j =1; j<i-1;j++)    //T = i-1
     {
      if(a[j]>max)
           max=a[j];
     return max;
     }
}
程序执行次数为i-1次,时间是1到n-1,时间复杂度为S(n-1) = (n-1)n/2
所以,平均时间复杂度为: S(n-1)/n = n-1/2 , 即时间复杂度为O(n)


猜你喜欢

转载自blog.csdn.net/qq_37504771/article/details/80471748