欢迎各位点赞👍 评论**✍收藏⭐**
目录
[1. 算法效率](#1. 算法效率)
[2. 时间复杂度](#2. 时间复杂度)
[2.1 时间复杂度的定义](#2.1 时间复杂度的定义)
[2.2 大O的渐进表示法](#2.2 大O的渐进表示法)
[2.3 推导大O渐进法](#2.3 推导大O渐进法)
[2.4 常见算法的时间复杂度](#2.4 常见算法的时间复杂度)
[2.4.1 冒泡排序](#2.4.1 冒泡排序)
[2.4.2 斐波那契数](#2.4.2 斐波那契数)
[2.4.3 二分查找](#2.4.3 二分查找)
[3. 空间复杂度](#3. 空间复杂度)
[3.1 常见算法空间复杂度](#3.1 常见算法空间复杂度)
[3.1.1 冒泡排序](#3.1.1 冒泡排序)
[3.1.2 斐波那契数](#3.1.2 斐波那契数)
[4. 小结](#4. 小结)
1. 算法效率
在以后 Java 编程中,肯定会接触许多算法,那么如何衡量一个算法的到底好不好呢?
那这时候,就要分析算法的效率了,算法效率一般分为两种,一种为时间复杂度,一种为空间复杂度,这两个是用来判断算法效率的两个准则!!!
2. 时间复杂度
2.1 时间复杂度的定义
时间复杂度可不是仅仅是算法运行了多久时间,而是算法运行了多少次数,算法中的基本操作的执行次数,为算法的时间复杂度
2.2 大O的渐进表示法
大O渐进法是用来描述时间复杂度的方法
下列算法的时间复杂度,用大O渐进法表示
java
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);
}
- 空间复杂度---> O(n)
4. 小结
以上就是对复杂度的了解,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持 !