public void fun(int n) {
int count = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) {
count++;
}
}
}
该算法的时间复杂度为 O(n^2)
2.3 推导大O渐进法
如果算法的执行次数为常数,那么就用 1 来表示,O(1)
在得到算法执行的次数时,一般只保留最高阶项
保留最高阶项时,该项的常数默认为 1
2.4 常见算法的时间复杂度
2.4.1 冒泡排序
java复制代码
void BubbleSort(int* arr, int n)
{
int end = n;
while (end)
{
int flag = 0;
for (int i = 1; i < end; ++i)
{
if (arr[i - 1] > arr[i])
{
int tem = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = tem;
flag = 1;
}
}
if (flag == 0)
{
break;
}
--end;
}
}
时间复杂度为---> O(n^2)
2.4.2 斐波那契数
java复制代码
int fib(int n){
if(n<2) return n;
return fib(n-1)+fib(n-2);
}
时间复杂度为---> O(2^n)
2.4.3 二分查找
java复制代码
int binarySearch(vector<int>& nums, int target) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
时间复杂度为---> O(log n)
3. 空间复杂度
空间复杂度也不是算法所占的内存空间,而是创建临时变量的个数,也是使用大O的渐进法来表示
3.1 常见算法空间复杂度
3.1.1 冒泡排序
java复制代码
void BubbleSort(int* arr, int n)
{
int end = n;
while (end)
{
int flag = 0;
for (int i = 1; i < end; ++i)
{
if (arr[i - 1] > arr[i])
{
int tem = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = tem;
flag = 1;
}
}
if (flag == 0)
{
break;
}
--end;
}
}
空间复杂度---> O(1)
3.1.2 斐波那契数
java复制代码
int fib(int n){
if(n<2) return n;
return fib(n-1)+fib(n-2);
}