算法基础-时间复杂度和空间复杂度

一.时间复杂度 

定义:在一个算法流程中,所需要的运行时间,一般用O表示。

以下用查找算法为例向大家说明时间复杂度

问题:给你一个数组(已排序),查找某一给定元素,输出下标。
方法一:直接按址查询

void serach(int a[],int b,int n)
{ 
   for(int i = 0;i<n;i++)
   {
      if(a[i] == b) cout<<i<<endl;
   }

}

其中n为数组长度,我们可以看到这种遍历数组的方法的时间复杂度为O(n)

方法二:二分查找

void Binary_Serach(int a[],int b,int n)
{
    int mid,left=0,right=n;
    bool flag = false;
    while(left<=right)
    {
        mid = (left+right)/2;
        if(a[mid]==b){
            flag = true;
            cout<<mid<<endl;
        }
        if(a[mid]<b)
        {
            left = mid+1;
        }
        else{
            right = mid-1;
        }
    }
    if(flag == false)
    {
        cout<<"没找到!"<<endl;
    }
    
}

二分查找是一直对半取的一种查找方式,即2x=n,这里的x为时间复杂度。x=O(log2n)

时间复杂度是用来衡量一个程序是否优秀的方式。

二.空间复杂度

定义:除去输入输出外完成程序所需要的空间。

一般我们声明一个变量的空间复杂度为常数阶,声明一个不知道大小的一维数组的空间复杂度为O(n)。

我们在写算法的过程中一般会用空间换时间。

猜你喜欢

转载自www.cnblogs.com/zhang1568234/p/12061545.html
今日推荐