度量算法的效率时就会提到时间复杂度和空间复杂度。
在谈时间复杂度之前我们先介绍一个O渐进表示法。
一、什么是O渐进表示法
一个算法语句总的执行次数总是关于问题规模N的某个函数,记为f(N),N称为问题的规模。语句总的执行次数记为T(N),当N不断变化是,T(N)也在变化,算法执行次数的增长速率和f(N)的增长速率相同。则有T(N)=O(f(N)),称O(f(N))为时间复杂度O的渐进表示法。
一般算法O(n)的计算方法:
先找次数
O( 次数)
用常数1取代运行时间中的所有常数
保留最高阶
丢掉常数C
二、时间复杂度
一个算法语句总的执行次数总是关于问题规模N的某个函数,记为f(N),N称为问题的规模。语句总的执行次数记为T(N),当N不断变化是,T(N)也在变化,算法执行次数的增长速率和f(N)的增长速率相同。则有T(N)=O(f(N)),称O(f(N))为时间复杂度O的渐进表示法。
三、空间复杂度
函数中创建对象的个数关于问题规模函数表达式,一般情况下用O的渐进表示法表示。
我们下来计算一下常见程序的时间复杂度和空间复杂度
二分查找法
int binary_search(int arr[], int key, int sz)
{
int left = 0;
int right = sz - 1;
int mid = 0;
while (left <= right)
{
mid = left + (right - left) / 2;
if (arr[mid] == key)