先来看两种求和的算法:
第一种算法:
int i,sum=0,n=100; //执行1次
for( i=1; i<=n; i++ ) //执行了n+1次
{
sum=sum+i; //执行n次
}
第二种算法:
int sum=0,n=100; //执行1次
sum = (1+n)*n/2; //执行1次
第一种算法执行了1+(n+1)+n=2n+2次。 第二种算法,是1+1=2次。
如果我们把循环看做一个整体,忽略头尾循环判断的开销,那么这两个算法其实就是n和1的差距。
再来延伸一下上面这个例子:
int i,j,x=0,sum=0,n=100; /* 执行一次 */
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
x++; /* 执行n×n次 */
sum = sum + x;
}
}
printf("%d",sum); /* 执行一次 */
因而,最终在分析程序的运行时间时,最重要的是把程序看成是独立于程序设计语言的算法或一系列步骤。