C语言怎样提⾼循环语句的效率?

一、问题

在C语⾔程序中,常常使⽤循环结构来解决特定的问题。那么在设计程序时,怎样才能提⾼循环语句的效率呢?

二、解答

C循环语句中,for 语句使⽤频率最⾼,while 语句其次,do 语句很少⽤。提⾼循环体效率的基本办法是降低循环体的复杂性。下⾯说明提⾼循环效率的⼏种情况。

1.直接提⾼循环语句的效率

(1)在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU 切换循环层的次数。例如下⾯两个循环语句,循环语句2 ⽐循环语句1 的效率⾼。

语句1:长的循环在外层

cpp 复制代码
for (i = 0; i < 100; i++)
{
    for (j = 0; j < 5; j++)
    {
        sum += a[i][j];
    }
}

语句2:长的循环在内层

cpp 复制代码
for (j = 0; j < 5; j++)
{
    for (i = 0; i < 100; i++)
    {
        sum += a[i][j];
    }
}

(2)如果循环体内存在逻辑判断,并且循环次数很⼤,宜将逻辑判断移到循环体的外⾯。例如下⾯两个循环语句:

语句1:效率低但程序简洁

cpp 复制代码
for (i = 0; i < N; i++)
{
    if (condition)
    {
        DoSomething();
    }
    else
        DoOtherthing();
}

语句2:效率⾼但程序不简洁

cpp 复制代码
if (condition)
{
    for (i = 0; i < N; i++)
    {
        DoSomething();
    }
}
else
{
    for (i = 0; i < N; i++)
    {
        DoOtherthing();
    }
}

语句1⽐语句2 多执⾏了 N-1 次逻辑判断。并且由于前者总要进⾏逻辑判断,打断了循环的模式,使得编译器不能对循环进⾏优化处理,降低了效率。

如果 N ⾮常⼤,最好采⽤示例语句2的写法,可以提⾼效率。如果 N ⾮常⼩,两者效率差别并不明显,采⽤语句1的写法⽐较好,因为程序更加简洁。

2. 间接提⾼循环语句的效率

(1)对于简单的if...else 语句,建议使⽤c语⾔的三⽬运算符" ?: "代替,以提⾼程序的执⾏效率。如:

cpp 复制代码
if (i < 20)
{
    a = 1;
}
else
{
    a = 6;
}

可以写成:

cpp 复制代码
a = (i < 20) ? 1 : 6;

(2)在程序中,不允许出现如下风格的语句。

cpp 复制代码
if (i < 20)
    return a;
return b;

应写成:

cpp 复制代码
if (i < 20)
{
    return a;
}
else
{
    return b;
}

(3)对于 switch 语句,在每个 case 语句的后⾯不要忘记加 break,除⾮是想使得某⼏个分⽀重叠。

(4) switch 语句⼀定要有 default,即使它不做什么。

三、总结

从上⾯的学习中可以知道,提⾼循环语句的效率有时是按照特定的⽅法降低代码的复杂性,有时却是视情况⽽定的。总的来说,提⾼循环体的效率应当在书写程序的循环语句时保持良好的风格。

相关推荐
LuminousCPP12 小时前
单链表专题(四)-刷题复盘篇-LeetCode 138 随机链表复制|原地拷贝法突破复杂指针操作
数据结构·笔记·算法·leetcode·链表
逆境不可逃12 小时前
【LeetCode 912】排序数组——随机化快速排序详解
数据结构·算法·排序算法
Coder-magician12 小时前
《代码随想录》刷题打卡day31:动态规划-背包问题part02
算法·动态规划
薛定e的猫咪12 小时前
从因果视角解决多智能体协作:细读 SCIC 算法
算法
c2385612 小时前
《算法武林谱:四大排序神功与二分寻宝术全解》
数据结构·算法·排序算法
一米阳光866112 小时前
软考(中级)软件设计师核心笔记(9)算法——时间复杂度与空间复杂度、查找算法、排序算法
笔记·算法·职场发展·软考·软件设计师·中级职称
OpenApi.cc13 小时前
MoCode — AI Agent Server (Docker) + macOS Desktop Client(开源项目)
数据结构·人工智能·深度学习·神经网络
Mem0rin13 小时前
二分查找:左右边界
数据结构·算法
lazily-c13 小时前
数据结构模板
数据结构
祖力5521 小时前
数据结构的基本概念与单向链表(链表数据类型构造、创建、头插、尾插、头删、尾删)
数据结构·链表