时间复杂度和空间复杂度
大O的渐进表示法 for循环O(n)
冒泡排序时间复杂度O(N^2)
N-1+N-2+N-3…+1
void Bubblesort(int* a, int n)
{
assert(a);
for (size_t end = n; end > 0; --end)
{
int exchange = 0;
for (size_t i=l; i < end; ++i)
{
if (a[i-l] > a[i])
{
swap(&a[i-1],&a[i]);
exchange = 1;
}
}
if(exchange==0)
break;
}
}
二分查找O(logN)
(查找真正会用的是红黑树,哈希表,B树,跳表)
int BinarySearch(int* a, int n,int x)
{
assert(a);
int begin = 0;
int end = n-l;
while (begin <= end)
{
int mid = begin + ((end-begin)>>1);
if(a[mid] < x)
begin = mid+1;
else if (a[mid]>x)
end = mid-1;
e1se
return mid;
}
return -1;
}
O(n^2)等差数列和
long long Fac(size_t N)
{
if(0== N)
return 1;
for (size_t i=0;i<N;++i)
{
//...
}
return Fac(N - 1)*N;
}
O(N)
long 1ong Fac(size_t N)
{
if (0==N)
return 1;
return Fac(N-1)*N;
}
空间复杂度
不是占用byte空间多少,是变量的个数
算法中临时(额外)占用空间的大小
冒泡排序end exchange i 三个变量
O(i)
fib斐波那契(N+1)个
O(N)
long long* Fibonacci(size_t n)
{
if(n==0)
return NULL;
long long*fibArray =(long long *)malloc((n+1)* sizeof(long long));
fibArray[0] =0;
fibArray[1] =1;
for (int i=2;i<= n ;++i)
{
fibArray[i]= fibArray[i- 1]+ fibArray [i- 2];
}
return fibArray;
}
longlong(N=0)
O(n)
冒泡排序n个栈帧(每里个常数个的变量)
long long Fac(size_t N)
{
if(N ==0)
return 1;
return Fac(N-1)*N;
}