• C语言中两种交换变量值方法的速度测试


    常见的交换两个变量值的方法有三种:

    • 最常见的一种方法,利用临时变量,交换两个变量的值。这种方法在生活中也很常见,假设有一个杯子A,其中有盛有饮料a,另有一个杯子B,其中盛有饮料b,如果我们想要把A和B两个杯子里的饮料对调,会借助一个空杯子C,先把A中的饮料a倒在空杯子C中,C中有了饮料a,于是A变成了空杯子,这时把B中的饮料b倒在A中,于是A中有了饮料b,B成了空杯子,最后将C中的饮料a倒在B中,B中有了饮料a,此时完成对调。

    • 第二种方法,利用数值异或运算两次不变的性质,交换两个变量值。

    • 第三种方法,利用两数之和减去一个数等于另一个数的性质,交换两个变量值。例如,10+1=11,10在前,1在后,通过11-10=1与11-1=10的变换后,1在前,10在后,两数完成交换。这种方法可能会造成数值溢出,比如两个绝对值较大的负数交换时,因此常规编程中不采用。

    C语言的代码实现:

    #include <stdio.h>
    #include <time.h>
    // 两种方法循环十亿次
    #define N 1000000000
    
    // 异或运算交换
    void swap_a(int *a, int *b)
    {
        *a ^= *b;
        *b ^= *a;
        *a ^= *b;
    }
    
    // 辅助变量交换
    void swap_b(int *a, int *b)
    {
        int temp = *a;
        *a = *b;
        *b = temp;
    }
    
    void show_a()
    {
        int a = 1, b = 2;
        clock_t begin, end;
        begin = clock();
        for (int i = 0; i < N; i++)
        {
            swap_a(&a, &b);
        }
        end = clock();
        printf("time a:%lfs
    ", (double)(end - begin) / CLOCKS_PER_SEC);
    }
    
    void show_b()
    {
        int a = 1, b = 2;
        clock_t begin, end;
        begin = clock();
        for (int i = 0; i < N; i++)
        {
            swap_b(&a, &b);
        }
        end = clock();
        printf("time b:%lfs
    ", (double)(end - begin) / CLOCKS_PER_SEC);
    }
    
    int main()
    {
        show_a();
        show_b();
        return 0;
    }
    

    输出结果:

    time a:17.846000s
    time b:8.940000s

    输出结果证明,利用辅助变量进行值的交换,运算效率最高,而此种方法也最常用,可读性也最高。

    如文章内容有错误,欢迎在评论中指正

  • 相关阅读:
    HTML滚动时位置固定 PHP
    js判断验证码是否正确 PHP
    PNG渐变图生成工具 PHP
    C# 提醒小工具 PHP
    js 密码强度检测 PHP
    js辅助输入层 PHP
    不常用样式 PHP
    ASP.NET编程中的十大技巧
    WEB打印大全
    如何在ASP.NET中用OWC绘制图表
  • 原文地址:https://www.cnblogs.com/biem/p/13583187.html
Copyright © 2020-2023  润新知