时间复杂度
常数操作:
例如: int a=arr[i]; 就是直接把arr的第i项给他了。这就是一个常数操作
再例如:int b=list.get(i) 如果是链表的话就只能一个个的遍历遍历到的i所以他就不是常数操作,是和数据量有关的操作,不是常数操作。
时间复杂度:
有多少次常数操作。
以选择排序为例:
这里一共进行了这些常数操作,把除最高项的低阶项和最高项的常数去掉,就是时间复杂度计作O(N)
先看时间复杂度的指标再看不同数据样本下的实际运行时间可以实际去跑~也就是常数项时间如果O(N)是一样的话只能用实际跑的方式来区分。
额外空间复杂度O(N)
O(1)
看看我们这个算法在进行的时候开辟了多少个空间如果我们没有开辟一个新的空间的话临时空间是不随着变化的,是固定的,所以空间复杂度就是O(1)。不需要一个新的空间来储存数据所以空间复杂度就是O(1)
O(n)
如果我们开辟了一个数组a[n]的话这个空间复杂度就是O(n)
以冒泡排序为例求其时间和空间复杂度:
void Bubbling_sorting(int *a,int n)
{
int i,j;
for (i = 0;i < n-1; i++ )
{
for(j = 0;j<n-i-1;j++)
{
if(a[j]>a[j+1])
{
int t=a[j];a[j]=a[j+1];a[j+1]=t;
}
}
}
}