法乎其上,得乎其中——从基础出发,写更优化的代码

【写在前面】
从开始学编程起,老师一直在问我们一个问题,“想想看,你写的代码还可以再优化吗?”同一道题目,编程方法难易兼有,找最优化的方法,做更专业的程序猿,这是我们的主业。
【热身赛】
从最基础的题目开始,我们来逐步向最优化代码行军。
Q:交换两个给定变量的值。
题目很基础,面试也会有,大家嫑忽视。
很容易大家就可以写出这样的代码:

#include <stdio.h>

int main()
{
    int num1 = 2;
    int num2 = 3;
    int tmp = 0;

    tmp = num1;
    num1 = num2;
    num2 = tmp;

    printf("num1=%d num2=%d\n", num1, num2);
}

或者,我们也可以引入swap函数来实现它:

#include <stdio.h>

void swap(int *x,int *y)
{
    int tmp = 0;
    tmp = *x;
    *x = *y;
    *y = tmp;
}

int main()
{
    int num1 = 2;
    int num2 = 3;
    swap(&num1, &num2);
    printf("num1=%d num2=%d\n", num1, num2);
}

这些都是基础的方法,大同小异。如果这时考官提出,请你不引入第三方变量来做这道题,该如何完成呢?
我们可能会想到用四则运算的方法实现它,以加法为例,其余类比:

#include <stdio.h>

int main()
{
    int num1 = 2;
    int num2 = 3;
    num1 = num1 + num2;
    num2 = num1 - num2;
    num1 = num1 - num2;
    printf("num1=%d num2=%d\n", num1, num2);
}

但是,这种方法也有弊端,数据过大时,可能会产生溢出,这时代码还可以优化吗?如我们所知,数据在计算机中以其二进制补码的形式存储,如果我们能想到用异或的方法去实现它,就真将课本知识学以致用了:

#include <stdio.h>

int main()
{
    int num1 = 2;//010
    int num2 = 3;//011
    num1 = num1^num2;//001
    num2 = num1^num2;//010
    num1 = num1^num2;//011
    printf("num1=%d num2=%d\n", num1, num2);

}

以上结果均见此图
法乎其上,得乎其中——从基础出发,写更优化的代码_第1张图片

完美。

【结语】
解决问题不是目的,用最优的方法解决问题是所求。“法乎其上,得乎其中”,老祖宗这句话总归没有错的。本次用这个简单的程序让大家明白这一点,后续将继续深入举例,带大家走进严谨的计算机世界,敬请期待。

你可能感兴趣的:(编程,优化,面试)