1. 在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。
eg. b的效率比a高
a.
for (row=0; row<100; row++)
{
for ( col=0; col<5; col++ )
{
sum = sum + a[row][col];
}
}
a.
for (row=0; row<100; row++)
{
for ( col=0; col<5; col++ )
{
sum = sum + a[row][col];
}
}
b.
for (col=0; col<5; col++ )
{
for (row=0; row<100; row++)
{
sum = sum + a[row][col];
}
}
for (col=0; col<5; col++ )
{
for (row=0; row<100; row++)
{
sum = sum + a[row][col];
}
}
2. 如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。
a. 效率低但程序简洁
for (i=0; i<N; i++)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
a. 效率低但程序简洁
for (i=0; i<N; i++)
{
if (condition)
DoSomething();
else
DoOtherthing();
}
b. 效率高但程序不简洁
if (condition)
{
for (i=0; i<N; i++)
DoSomething();
}
else
{
for (i=0; i<N; i++)
DoOtherthing();
}
if (condition)
{
for (i=0; i<N; i++)
DoSomething();
}
else
{
for (i=0; i<N; i++)
DoOtherthing();
}