注意:
死磕代码,注意思考,在意信息,画图辅导!!!
推荐书籍
《剑指offer》、《程序员代码面试指南》
时间复杂度(大o渐进表示法)
算法复杂度分为时间复杂度和空间复杂度。其作用: 时间复杂度是指执行算法所需要的计算工作量;而空间复杂度是指执行这个算法所需要的内存空间。(算法的复杂性体运行该算法时的计算机所需资源的多少上,计算机资源最重要的是时间和空间(即寄存器)资源,因此复杂度分为时间和空间复杂度。) ————百度百科
大O表示法:算法的时间复杂度通常用大O符号表述,定义为T[n] = O(f(n))。称函数T(n)以f(n)为界或者称T(n)受限于f(n)。 如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n)。T(n)称为这一算法的“时间复杂度”。当输入量n逐渐加大时,时间复杂度的极限情形称为算法的“渐近时间复杂度”。 ————百度百科
void BubbleAort(int* a, int n)
{
assert(a);
for (type end = n; end > 1; --end)
{
int exchange = 0;
for (type i = 1; i < end; ++i)
{
if (a[i-1] > a[i])
{
Swap(&A[i-1], &a[i]);
exchange = 1;
}
}
}
}
//最好:O(N),最坏:O(N^2)
int BinarySearch(int* a, int n, int x)
{
assert(a);
int begin = 0;
int end =n-1;
while(begin<=end)
{
int mid=begin+((end-begin)>>1);
if(a[mid]<x)
begin=mid+1;
else if (a[mid]>x)
end=mid-1;
else
return end;
}
return -1;
}
//最好:O(1),最坏:O(log2 N)
long long Fac(int n)
{
if (n==0)
return 1;
return Fac(n-1)*n;
}
//时间复杂度O(N)
long long Fib (int n)
{
if (n<3)
return 1;
return Fib(n-1)+Fib(n-2);
}
//时间复杂度O(2^N)
//画图,类似于等比数列+缺失常数